Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何一次重命名多个文件_Linux_Shell_Awk_Sed_File Rename - Fatal编程技术网

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