我想将当前目录中的所有文件移动到以NewDir. 结尾的目录中*.bam,但名为special.file.bam.
我发现这个命令可以删除所有文件,但不知道如何移动它们,而不是删除它们:
find . ! -name 'special.file.bam' -type f -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)
如果你的 shell 是 bash shell,你可以简单地通过启用扩展 Glob 执行以下操作:
shopt -s extglob
mv -- !(special.file).bam temp/
Run Code Online (Sandbox Code Playgroud)
要抑制错误:" bash: /usr/bin/mv: Argument list too long" 当匹配给定模式的文件太多时,请执行以下操作:
for file in !(special.file).bam; do
mv -- "$file" temp/
done
Run Code Online (Sandbox Code Playgroud)
或者使用find命令代替和可移植性:
find . -path './*' -prune -type f -name '*.bam' ! -name 'special.file.bam' \
-exec sh -c 'for file; do mv "$file" temp/; done' sh_mv {} +
Run Code Online (Sandbox Code Playgroud)
删除-path './*' -prune部分以查找子目录中的文件。