如何一次重命名多个文件

How to rename multiple files at once

我的文件系统中有很多文件、目录和子目录。
例如:

/path/to/file/test-poster.jpg
/anotherpath/my-poster.jpg
/tuxisthebest/ohyes/path/exm/bold-poster.jpg

我想将所有文件名从 *-poster.jpg 更改为 folder.jpg
我试过 sedawk 但没有成功。
帮助不大?

你可以用 find:

find -name "*poster.jpg" -exec sh -c 'mv "[=10=]" "${0%/*}/folder.jpg"' '{}' \;

说明

在这里,对于每个匹配的文件名,执行:

sh -c 'mv "[=11=]" "${0%/*}/folder.jpg"' '{}'

其中 '{}' 是作为参数传递给 command_string:

的文件名
mv "[=12=]" "${0%/*}/folder.jpg"

因此,最后,[=16=] 将具有文件名。

最后,${0%/*}/folder.jpg 扩展到旧文件名的路径并添加 /folder.jpg

例子

请注意,我将 mv 替换为 echo

$ find -name "*poster.jpg" -exec sh -c 'echo "[=13=]" "${0%/*}/folder.jpg"' '{}' \;
./anotherpath/my-poster.jpg ./anotherpath/folder.jpg
./path/to/file/test-poster.jpg ./path/to/file/folder.jpg
./tuxisthebest/ohyes/path/exm/bold-poster.jpg ./tuxisthebest/ohyes/path/exm/folder.jpg

试试这个脚本,它应该根据需要重命名所有文件。

for i in $(find . -name "*-poster.jpg") ; do folder=`echo $i | awk -F"-poster.jpg" {'print '}`; mv -iv $i $folder.folder.jpg; done

您可以替换 .到脚本中命令 find . -name "*-poster.jpg" 中放置这些文件的目录。让我知道它是否适合你。

你可以试试

find  -name '*poster*' -type f -exec sh -c 'mv "{}"  "$(dirname "{}")"/folder.jpg' \;

查找所有包含海报的文件== find -name '*poster*' -type f

复制文件的目录路径并将其存储在临时变量中,然后将"folder.jpg"附加到目录路径== -exec sh -c 'mv "{}" "$(dirname "{}")"/folder.jpg' \;