我有一个包含5000张JPG扩展名图片的文件夹。
我想要做的是,递归地向所有图像添加"thumb_"前缀。
我找到了一个类似的问题:重命名文件和目录(添加前缀),但我只想将前缀添加到扩展名为JPG的文件中。
我有一个包含5000张JPG扩展名图片的文件夹。
我想要做的是,递归地向所有图像添加"thumb_"前缀。
我找到了一个类似的问题:重命名文件和目录(添加前缀),但我只想将前缀添加到扩展名为JPG的文件中。
可能的解决方案之一:
find . -name '*.jpg' -printf "'%p' '%h/thumb_%f'\n" | xargs -n2 echo mv
mv
命令准备参数。mv
的参数用'
括起来,以允许文件名中包含空格。echo
。mv $file $newfile #will fail, if the filename contains space, TAB or newline
mv "$file" "$newfile" #will fail, if the any of the filenames contains "
正确的解决方案有两种:
在bash中准备正确的转义是可能的,使用其内部的printf
和%q
格式化指令 = 打印引用
。但这种解决方案又长又无聊。
在我看来,最简单的方法是使用perl
和零填充的print0
,如下所示。
find . -name \*.jpg -print0 | perl -MFile::Basename -0nle 'rename $_, dirname($_)."/thumb_".basename($_)'
for ... in ...
语句中会出现错误),并且要知道 find . ...
的结果将始终以 ./
开头(因此会尝试给出像 thumb_./file.JPG
这样不太正确的名称)。find . -iname \*.JPG -exec bash -c 'mv "$1" "`echo $1 | sed \"s/\(.*\)\//\1\/thumb/\"`"' -- '{}' \;
find . -iname "*.jpg" -print | while read name; do cur_dir=$(dirname "$name"); cur_file=$(basename "$name"); mv "$name" "$cur_dir/thumb_$cur_file"; done
我实际上是给CakePHP视图文件添加了一个“admin_”前缀,以将它们全部移动到管理部分。
findutils
macport - 它包含带有-printf
的gnu-find命令(命令:gfind
)。 - clt60您可以使用相同的答案,只需使用*.jpg
而不是*
。
for file in *.JPG; do mv $file thumb_$file; done
如果它在当前目录下的多个目录级别中:
for file in $(find . -name '*.JPG'); do mv $file $(dirname $file)/thumb_$(basename $file); done
jcomeau@intrepid:/tmp$ mkdir test test/a test/a/b test/a/b/c
jcomeau@intrepid:/tmp$ touch test/a/A.JPG test/a/b/B.JPG test/a/b/c/C.JPG
jcomeau@intrepid:/tmp$ cd test
jcomeau@intrepid:/tmp/test$ for file in $(find . -name '*.JPG'); do mv $file $(dirname $file)/thumb_$(basename $file); done
jcomeau@intrepid:/tmp/test$ find .
.
./a
./a/b
./a/b/thumb_B.JPG
./a/b/c
./a/b/c/thumb_C.JPG
./a/thumb_A.JPG
jcomeau@intrepid:/tmp/test$
shopt -s nocaseglob
将关闭大小写敏感性。 - Spencer Rathbun使用rename
来实现:
rename 's/(\w{1})\.JPG$/thumb_$1\.JPG/' `find . -type f -name *.JPG`
只针对当前文件夹中的jpg
文件
for f in `ls *.jpg` ; do mv "$f" "PRE_$f" ; done
ls
的输出。尝试一个文件 touch "a b c.jpg"
。相反,使用 for f in *.jpg
会好得多。 - user unknown""
。 - Ashish Patil
'*'
替换为'*.jpg'
即可。 - Johan