我必须找到logo.png
在不同子目录中命名的多个文件,并将它们的名称更改为oldlogo.png
,我该怎么做?
我已经开始找到文件(每个logo.png
文件是 56431 字节),但我不知道如何将它们移动到同一子目录中的另一个文件。
这就是我查找文件的方法:
find -name logo.png -size 56431c
答案1
假设您的find
命令准确地找到了您要重命名的文件,您可以通过使用调用来重命名这些文件,mv
如下find
所示-execdir
:
find . -name logo.png -size 56431c -execdir mv {} oldlogo.png \;
该-execdir
谓词是非标准的,但经常被实现。它在找到名称的目录中执行给定的实用程序,并{}
替换为文件名(GNUfind
将./
在文件名前面添加,而其他find
实现可能不会这样做)。在上面的命令中,我们使用这个事实将logo.png
文件重命名为,oldlogo.png
而不指定目录路径。
使用 standard find
,您可能想这样做:
find . -name logo.png -size 56431c -exec sh -c '
for pathname do
mv "$pathname" "${pathname%/*}/oldlogo.png"
done' sh {} +
上面的代码将sh -c
批量调用找到的文件的路径名。内联脚本将迭代给定的一批路径名,并将每个路径名重命名到oldlogo.png
与找到它的目录相同的目录中find
。参数替换将从 的值中${pathname%/*}
删除最后一个和其后的所有内容(以便它返回路径名的目录部分)。/
$pathname
dirname "$pathname"