/ home /目录中有一堆filename.gif。 我希望所有的filename.gif被/home/shared/filename_default.gif取代。
我试过类似的东西
find /home/ -name "filename.gif" | xargs <cmd>
但我不知道我想要什么。 一定不会问这里或计算器
编辑:这工作完全像我解释说,除了我不仅想从filename_default的数据取代filename.gif,而且为filename.gif被重命名为filename_default.gif。 所以我做了mv {} filename_default.gif ,并将其目录中的所有文件mv {} filename_default.gif到名为filename_default.gif …的lol下的/ root /下。 无论如何,引用目录中的变化的variables..
例如find / home / -name“filename.gif”实际上是这样的…
/home/brian/dir/1/2/3/filename.gif /home/beth/dir/1/2/3/filename.gif /home/andrea/dir/1/2/3/filename.gif
我怎么能参考brian,beth,andrea …就像通配符*。
cp /home/shared/filename_default.gif /home/*/dir/1/2/3/filename_default.gif
这个怎么样?
find /home/ -name filename.gif -exec mv -f /home/shared/filename_default.gif {} \;
-exec标志已经find每个find的对象执行一个命令。 {}表示find的文件的名称。 然后您必须用\;来终止shell命令\; 。 你可以用ln -s来把这些.gifs符号链接起来。 如果你想改变你的共享的.gif而不重做这种查找和移动,这可能会更容易。
下面由Denilson 编辑好点。 尽pipe涉及mv的问题,它只会在源文件消失之前运行一次。 (移动)他对echo命令的build议是在事情发生之前仔细检查会发生什么的好方法。
find /home/ -name filename.gif -exec cp -p /home/shared/filename_default.gif {} \;
– 克里斯托弗·卡雷尔
find /home -name filename.gif -type f -printf "%h\0" | xargs -0 --max-args 1 cp -l /home/shared/filename_default.gif
这不是你要求的通配符,但它确实完成了你的任务的第一部分,即把“ filename_default.gif ”放在目标目录中。 如果按照你想要的方式工作,你可以用' rm 'replace命令中的' cp -l /home/shared/filename_default.gif '部分,用' – 'replace' -printf "%h\0" -print0 '删除原始文件。
这假定你想取/home/shared/filename_default.gif的内容,并将这些内容放在一个名为“ filename_default.gif ”的filename_default.gif ,在所有包含“ filename.gif ”的目录中,删除“ filename.gif ”(从而有效地用名为' filename.gif '的文件中的相同图像replace' filename.gif '命名文件)
如果要replace“ filename.gif ”,但保留相同的名称,则用' -print0 'replace' -printf "%h\0" ',并省略rm步骤。
# find -type f -name 'filename.gif' -exec cp -v /home/shared/filename_default.gif {} \;
这将取代所有“filename.gif”文件的内容“filename_default.gif”,但不会将“filename.gif”重命名为“filename_default.gif”
重命名使用以下命令
# rename 's/filename.gif/filename_default.gif/' $(find -type f -name 'filename.gif')
HTH