我正在尝试重命名一堆文件,使用带有find
和rename
的bash脚本替换特定字符串。当我指定文件类型时,这适用于文件,但我有一些我需要更改的文件没有文件类型,我无法弄清楚如何重命名它们。
对于带有文件类型的文件,我成功使用它来将$ old_session替换为$ new_session,例如在每个.jpg文件中:
old_session='123'
new_session='456'
find my_folder -name '*.jpg' -type f -exec rename $old_session $new_session *.jpg {} \;
但是当我尝试对没有文件类型的文件做同样的事情时,没有任何反应:
find my_folder -name '*' -type f -exec rename $old_session $new_session * {} \;
或
find my_folder -name '*${old_session}*' -type f -exec rename $old_session $new_session *${old_session}* {} \;
如何更改未指定类型的文件的文件名?
谢谢!
答案 0 :(得分:1)
适用于模式*.jpg
,因为您运行jpg
的文件夹中没有find
个文件,并且shell将*.jpg
未展开传递给{{1}将未经扩展传递给find
的命令,它可以正常工作。
但是当你这样做时:
rename
使用来自当前目录的所有文件展开find my_folder -name '*' -type f -exec rename $old_session $new_session * {} \;
并按原样传递给*
,这不是您想要的。
改为:
rename
(这对于find my_folder -name '*' -type f -exec rename $old_session $new_session "*" {} \;
文件来说也更好BTW:))
答案 1 :(得分:0)
我会这样做:
让我们说“old_session”是kkk而我们的“new_session”是“noname”
考虑目录中的以下文件。几个kkk和.sh文件。
bash$> ls -lrt
total 0
-rw-r--r--. 1 root root 0 Oct 7 03:03 3432kkk
-rw-r--r--. 1 root root 0 Oct 7 03:03 334kkk
-rw-r--r--. 1 root root 0 Oct 7 03:03 222kkk
-rw-r--r--. 1 root root 0 Oct 7 03:03 190kkk
-rw-r--r--. 1 root root 0 Oct 7 03:03 123kkk
-rw-r--r--. 1 root root 0 Oct 7 03:03 c.sh
-rw-r--r--. 1 root root 0 Oct 7 03:03 b.sh
-rw-r--r--. 1 root root 0 Oct 7 03:03 a.sh
使用的命令/脚本将执行以下步骤:
echo $file|sed "s/$old_session//g"
)命令准备新名称。bash$> find . -type f | sed 's/^\.\///g' | grep -v "\." | while read file
> do
> new=`echo $file|sed "s/$old_session//g"`
> mv $file ${new}_${new_session}
> echo "$file renamed to ${new}_${new_session}"
> done
ls -lrt
123kkk renamed to 123_noname
222kkk renamed to 222_noname
334kkk renamed to 334_noname
3432kkk renamed to 3432_noname
190kkk renamed to 190_noname
bash$> ls -lrt
total 0
-rw-r--r--. 1 root root 0 Oct 7 03:03 c.sh
-rw-r--r--. 1 root root 0 Oct 7 03:03 b.sh
-rw-r--r--. 1 root root 0 Oct 7 03:03 a.sh
-rw-r--r--. 1 root root 0 Oct 7 03:09 3432_noname
-rw-r--r--. 1 root root 0 Oct 7 03:09 334_noname
-rw-r--r--. 1 root root 0 Oct 7 03:09 222_noname
-rw-r--r--. 1 root root 0 Oct 7 03:09 123_noname
-rw-r--r--. 1 root root 0 Oct 7 03:09 190_noname
bash$>