Mic*_*ott 5 linux bash cp find xargs
我有一个简单的命令,几乎可以完成我想要的操作。以下将定位所有后缀为“_compressed.swf”的文件,并将每个文件复制到其同一个目录中,并附加“.bak2”:
find '../content' -name '*_compressed.swf' -print0 | xargs -0 -I {} cp {} {}.bak2
结果
输入:/content/somefile_compressed.swf
输出:/content/somefile_compressed.swf.bak2
但是,我需要将 '_compressed.swf' 替换为 '_content.swf' 我想使用 find,而不是 cp 上的递归标志以保持一致性。
目标
输入:/content/somefile_compressed.swf
输出:/content/somefile_content.swf
这个解决方案可能是最便携的:
find "../content" -name "*_compressed.swf" -exec sh -c 'cp {} `dirname {}`/`basename {}compressed.swf`content.swf' \;
还有著名的rename.pl脚本,它与 Perl 一起分发,还有rename命令可以使这更容易一些。但是,并非所有发行版都提供这些命令,这些命令在大多数情况下都可用。