【问题标题】:Shell script to find and move files and delete the affected folders用于查找和移动文件并删除受影响文件夹的 Shell 脚本
【发布时间】:2014-02-19 08:16:38
【问题描述】:
是否可以创建一个 shell 脚本,在特定类型的文件夹中及其下方查找文件,并将它们移动到另一个文件夹(这部分已经解决*)。然后删除从其中移动文件的所有文件夹?
我想应该可以将路径/文件夹名称写入数组或文件,然后从那里读取到“rm”它们。
查找文件示例:
find . \( -name "*.mpeg" – o –name "*.mkv" –o –name "*.avi" –o –name "*.mov" \) –size +536870912c –exec mv -n –v {} /my/favorite/folder/ \;
需要删除的那些文件夹的第二部分仍然丢失。
【问题讨论】:
标签:
file
shell
command
directory
【解决方案1】:
如果您不介意使用其他可执行文件,您可以这样做:
find . \( -name "*.mpeg" – o –name "*.mkv" –o –name "*.avi" –o –name "*.mov" \) –size +536870912c | \
gawk -F'/[^/]*$' '{print "echo mv " $0 " /WHERE/TO/MOVE" ; dirstoremove[$1]++ }
END {for (d in dirstoremove) {print "echo rmdir " d } }' | \
bash
- 首先
find你的物品
- 然后
gawk 创建可移动文件列表并将其路径存储在数组中,处理完所有文件后,为数组中的每个元素打印rmdir
- 并将其输出发送到执行它的
bash。
注意:以上内容不会删除任何内容,只是echoes 应该做什么。如果您对结果感到满意并想要执行它,您可以删除两个“echo”或在末尾再添加一个| bash。
【解决方案2】:
如果你喜欢单行(像我一样),你可以扩展你的命令如下:
<your find command> -print | xargs -l dirname | sort -u | xargs rmdir
-print 回显已移动文件的路径。
xargs -l dirname 去掉文件名,生成目录名列表。
sort -u 通过删除重复项来减少目录名称列表。
xargs rmdir 删除目录。