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