用于查找和移动文件并删除受影响文件夹的Shell脚本

时间:2014-01-28 06:46:36

标签: file shell command directory

是否可以创建一个shell脚本来查找特定类型文件夹内和下的文件,并将它们移动到另一个文件夹(此部分已经解决*)。然后删除文件移动到的所有文件夹?

我想应该以某种方式将路径/文件夹名称写入数组或文件,然后从那里读取“ rm ”它们。

查找文件示例:

find . \( -name "*.mpeg" – o –name "*.mkv" –o –name "*.avi" –o –name "*.mov" \) –size +536870912c –exec mv  -n –v {} /my/favorite/folder/ \;

第二部分,其中移动的文件夹需要删除,但仍然缺失。

2 个答案:

答案 0 :(得分:0)

如果你不介意使用其他可执行文件,你可以这样做:

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
  1. 首先find您的商品
  2. 然后gawk创建可移动文件列表并将其路径存储在数组中,处理完所有文件后,为阵列中的每个元素打印rmdir
  3. 并将其输出发送到执行它的bash
  4. 注意 :以上内容不会删除任何内容echo es应该做什么。如果您对结果感到满意并想要执行结果,则可以删除两个“echo”,或者只是添加一个| bash到最后。

答案 1 :(得分:0)

如果您喜欢单行(就像我一样),您可以按如下方式扩展命令:

<your find command> -print | xargs -l dirname | sort -u | xargs rmdir

-print回显已移动文件的路径。

xargs -l dirname剥离文件名,生成目录名列表。

sort -u通过删除重复项来减少目录名列表。

xargs rmdir删除目录。