我需要通过 cp 命令将一个文件夹中所有不以 .txt、.cpp 和 .h 扩展名结尾的文件移动到一个单独的文件夹。
有内置的方法可以做到这一点还是我需要编写脚本?
答案1
这完全取决于您所需的稳健性。其中一些想法(例如 -print0)并非在所有系统上都可用,所以 YMMV。
快速、一次性地需要少量文件:
mkdir .tmp
mv *.txt *.cpp *.h .tmp
mv * /separate_folder/
mv .tmp/* .
rmdir .tmp
当然,这是一种 hack,但它不会占用 I/O,只需几秒钟即可完成,并且是便携式的。
对于处理许多文件:
find . -maxdepth 1 -type f ! -name '*.txt' ! -name '*.cpp' ! -name '*.h' -print0 | xargs -0 mv -t /separate_folder/
如果您的文件名不包含空格或其他奇怪的字符,您可能可以省略 and -print0
(-0
从而依赖于默认-print
逻辑)。
如果使用 Bash
GLOBIGNORE
请参阅有关变量“限制与模式匹配的文件名集”以及!(pattern-list)
“匹配除给定模式之一之外的任何内容”的Bash 手册页。