重命名 + 继续前询问

重命名 + 继续前询问

我需要程序找到带有特定字符串的文件名,然后重命名它。这部分工作正常。但我需要添加一些用户输入,在每次重命名之前询问用户是否要重命名文件。然后,在找到所有文件后,它应该写入已重命名的文件名。我的命令仅重命名与字符串匹配的所有文件。

find . -type f -exec rename's/(.*)\/(.*)string1(.*)/$1\/string2$2string3$3/' {} + ;;

答案1

您可以使用find命令的-ok操作来代替-exec

man find

-ok command ;
          Like  -exec but ask the user first.  If the user agrees, run the
          command.  Otherwise just return false.  If the command  is  run,
          its standard input is redirected from /dev/null.

例如,给定

$ touch file{A..F}
$ ls
fileA  fileB  fileC  fileD  fileE  fileF

然后

$ find . -name 'file*' -ok rename -v -- 's/file/newfile/' {} \; >rename.log
< rename ... ./fileB > ? y
< rename ... ./fileC > ? n
< rename ... ./fileF > ? n
< rename ... ./fileD > ? y
< rename ... ./fileE > ? n
< rename ... ./fileA > ? y

$ cat rename.log 
./fileB renamed as ./newfileB
./fileD renamed as ./newfileD
./fileA renamed as ./newfileA

请注意,您不能使用+多参数形式(因为每个重命名命令都需要单独处理)。

相关内容