可能是重复问题:
如何在Unix中一次性重命名多个文件
我想用正则表达式重命名一个文件夹中的所有文件(在名字末尾添加名称)并将它们移动到另一个文件夹。
我认为应该像这样:
mv -v ./images/*.png ./test/*test.png
但是它无法工作。
有人能给我提供一个解决方案吗?
可能是重复问题:
如何在Unix中一次性重命名多个文件
我想用正则表达式重命名一个文件夹中的所有文件(在名字末尾添加名称)并将它们移动到另一个文件夹。
我认为应该像这样:
mv -v ./images/*.png ./test/*test.png
但是它无法工作。
有人能给我提供一个解决方案吗?
如果你使用的是Linux系统,请检查特殊的 rename
命令,该命令可以使用正则表达式进行重命名。
rename 's/^images\/(.+)/test\/$1.png/s' images/*.png
否则,请按照catwalk建议的方式编写一个针对文件名的bash循环。rename 's/_20/ /g' *.mp4
:非常方便,无需记忆和打字,谢谢! - ptimbrew install rename
。 - Jeff Puckett$1
,通过s/blah_blah(\d\d)blah_blah([0-9A-F]{8})/$1/
将文件从blah_blah_15_blah_blah_948ABCD1.txt
重命名为15.txt
。 - Fuhrmanator试试这个:
for x in *.png;do mv $x test/${x%.png}test.png;done
for x in *.png; do mv "$x" "test/${x%.png}test.png"; done
。这样可以确保命令正确地解析空格。 - Dennis Williamsonfor
循环无论是否用引号都会出现问题。因此最好使用生成器 | while read line; do something with "$line"; done 习惯用法。在这种情况下,可以使用以下命令:ls | grep '\.png$' | while read x; do ... ; done
。 - just somebodyIFS
,为了下一个可能使用该机制的命令,请将其设置回之前的值。 - Michał Lepczyński$ for old in ./images*.png; do
new=$(echo $old | sed -e 's/\.png$/test.png/')
mv -v "$old" "$new"
done
mv file_20name.mp4 "$(echo file_20name.mp4 | sed -e 's/_20/ /g')"
. - ptimfor old in \
ls`; do new=$(echo $old | sed -e 's/_//g'); mv "$old" "$new"; done` - Sean the Bean
blah_blah_15_blah_blah_948ABCD.txt
,对我来说重要的部分是第一个数字,而第二个数字是某种校验和。该捕获在https://dev59.com/13I-5IYBdhLWcg3wN1lD#1961273中显示。 - Fuhrmanator