移动以字符串开头的文件夹中的所有文件

移动以字符串开头的文件夹中的所有文件

我正在尝试使用以下命令:

find . -type d -name "2016*" -exec mv {}/* ../../../Pictures/2016/ \;

将以 2016 开头的任何文件夹中的所有文件移动到名为 Pictures/2016 的另一个文件夹中。它没有找到文件/目录,但是回显给出了以下内容:

mv ./2016-02-13/* ../../../Pictures/2016/

Stack Exchange 的聪明人有什么想法吗?

答案1

使用子 shellfind

*在 shell 看到它之前,它将被展开find,所以这是错误的——它甚至可能导致数据丢失。您不能引用它,因为这样它根本就不会被展开。

你所需要的是一个接收文件夹作为参数的子 shell,然后稍后进行扩展:

find . -type d -name '2016*' -exec sh -c 'mv -- "$0"/* /path/to/target/' {} \;

可防止--以 开头的文件-被解释为mv选项,并且您应该在 中引用文件夹名称"$0"

使用纯 Bash

使用 Bash ≥ 4.0 的递归通配符的替代方法:

shopt -s globstar
mv **/2016*/* /path/to/target/

我想这会干净得多,尽管它会因文件数量过多而崩溃。

相关内容