Linux 如何一次重命名多个文件
我的文件系统中有很多文件、目录和子目录。Linux 如何一次重命名多个文件,linux,shell,awk,sed,file-rename,Linux,Shell,Awk,Sed,File Rename,我的文件系统中有很多文件、目录和子目录。 例如: /path/to/file/test poster.jpg /另一条路径/my poster.jpg /tuxishebest/ohyes/path/exm/bold-poster.jpg 我想将所有文件名从*-poster.jpg切换到folder.jpg 我尝试了sed和awk,但没有成功。 没有什么帮助?您可以通过以下方式完成: 解释 这里,对于每个匹配的文件名,执行: sh -c 'mv "$0" "${0%/*}/folder.jpg"
例如: /path/to/file/test poster.jpg
/另一条路径/my poster.jpg
/tuxishebest/ohyes/path/exm/bold-poster.jpg 我想将所有文件名从
*-poster.jpg
切换到folder.jpg
我尝试了
sed
和awk
,但没有成功。没有什么帮助?您可以通过以下方式完成: 解释 这里,对于每个匹配的文件名,执行:
sh -c 'mv "$0" "${0%/*}/folder.jpg"' '{}'
其中,'{}'
是作为参数传递给命令字符串的文件名:
因此,在结尾,$0
将具有文件名
最后,${0%/*}/folder.jpg
扩展到旧文件名的路径并添加/folder.jpg
例子
请注意,我将mv
替换为echo
尝试此脚本,它将根据需要重命名所有文件
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中放置这些文件的目录-脚本中的名称“*-poster.jpg”
。让我知道它是否适合您。您可以试一下
find -name '*poster*' -type f -exec sh -c 'mv "{}" "$(dirname "{}")"/folder.jpg' \;
查找包含海报的所有文件==find-name'*poster*'-键入f
复制文件的目录路径并将其存储在临时变量中,然后将“folder.jpg”附加到目录路径==
-exec sh-c'mv“{}”“$(dirname“{}”)”/folder.jpg'
\ 我已停止使用cli实用程序来执行此类任务,尽管这当然是可能的。查看kfilerename
。它完成了这项工作,而且非常强大。然后还有mmv
可以从CLI中完成这项任务。上次我查看时,它是一个C源代码,曾经编译过,允许这样做。它也出现在我的网站上,@ElliottFrisch我不认为它是重复的,我认为这两个问题根本不同。@ElliottFrisch不,OP想命名位于不同特定位置的文件,而不是某个地图中的所有文件(无论目录结构有多深)。释放find命令将产生比OP希望更改的结果更多的结果。@ShellFish我们正在阅读相同的问题吗?他想在他的许多文件、目录和子目录中将所有文件名从*-poster.jpg切换到folder.jpg,然后举个例子,列举了三个.Nice,+1:“${0%/*}/folder.jpg”
。非常优雅的脚本!我认为OP希望将*-poster.jpg
重命名为folder.jpg
,而不仅仅是-poster.jpg
重命名为folder.jpg
。此外,文件名匹配模式*-poster.jpg
,而不是*.poster.jpg
。
$ 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
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*' -type f -exec sh -c 'mv "{}" "$(dirname "{}")"/folder.jpg' \;