如何将所有 .txt 文件从文件夹和所有包含的文件夹移动到目标目录中。
最好将它们重命名为它们所在的文件夹,尽管那并不重要。我对 bash 并不十分熟悉。
要递归移动文件,请find
结合mv
.
find src/dir/ -name '*.txt' -exec mv -t target/dir/ -- {} +
或者,如果在没有 GNU 版本的 UNIX 系统find
(例如 macOS)上,请使用:
find src/dir/ -name '*.txt' -exec mv -- {} target/dir/ ';'
要在移动文件时重命名文件,会比较棘手。一种方法是使用一个循环"${var//from/to}"
来替换所有出现的from
with to
in $var
。
find src/dir/ -name '*.txt' -print0 | while IFS= read -rd $'\0' file; do
mv -- "$file" target/dir/"${file//\//_}"
done
这很难看,因为from
它是一个斜杠,需要转义为\/
.
也可以看看:
尝试这个:
find source -name '*.txt' | xargs -I files mv files target
这将比使用 -exec 的任何选项更快,因为它不会为每个需要移动的文件调用单个 mv 进程。
如果它只是一个级别:
mv *.txt */*.txt target/directory/somewhere/.