我需要程序找到带有特定字符串的文件名,然后重命名它。这部分工作正常。但我需要添加一些用户输入,在每次重命名之前询问用户是否要重命名文件。然后,在找到所有文件后,它应该写入已重命名的文件名。我的命令仅重命名与字符串匹配的所有文件。
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
请注意,您不能使用+
多参数形式(因为每个重命名命令都需要单独处理)。