如何一次重命名多个文件

时间:2015-01-10 18:30:13

标签: linux shell awk sed file-rename

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

  

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

我想将所有文件名从*-poster.jpg切换为folder.jpg
我尝试使用sedawk但没有成功 一点帮助?

3 个答案:

答案 0 :(得分:5)

您可以使用find

执行此操作
find -name "*poster.jpg" -exec sh -c 'mv "$0" "${0%/*}/folder.jpg"' '{}' \;

解释

此处,对于匹配的每个文件名,执行:

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

其中'{}'是作为参数传递给 command_string 的文件名:

mv "$0" "${0%/*}/folder.jpg"

因此,最后,$0将具有文件名。

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

实施例

注意我正在用mv替换echo

$ find -name "*poster.jpg" -exec sh -c 'echo "$0" "${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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

你可以试试

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' \;