将文件以外的所有文件移动到目标目录的命令是什么*.trg
?
尝试了以下命令,但是没有作用:
mv !(*.trg) tgtdir
答案1
您有一个扩展的 glob 模式,它只有在启用 shell 选项!(*.trg)
时才会起作用。extglob
正如输出shopt extglob
所示:
extglob off
您没有启用该选项。
因此您需要extglob
通过以下方式启用:
shopt -s extglob
那么你的命令就应该可以起作用了。
此外,可以通过以下方式使你的命令更加紧凑:
mv -t tgtdir !(*.trg|tgtdir)
答案2
find
与否定参数一起使用-name
:
find . ! -name '*.trg' ! -name . -maxdepth 1 -exec mv {} <tgtdir> \;
! -name .
排除当前目录并-maxdepth 1
确保只有当前目录中的文件和目录才会出现在搜索结果中。
就像普通的一样mv
,根据您tgtdir
存在的位置,您可能也需要将其排除。