Linux
根據目錄名重命名文件
for i in L*; do cd $i find . -type f -name 'botrytis_cinerea_T12345.*' -exec rename 's/botrytis_cinerea_T12345/"$i"/g' {} \; done
我得到錯誤
find: missing argument to `-exec' rename: not enough arguments Usage: rename [options] expression replacement file... Options: -v, --verbose explain what is being done -s, --symlink act on symlink target -h, --help display this help and exit -V, --version output version information and exit For more details see rename(1).
有兩個
rename
具有不同語法的常用命令。您正在使用為接受 Perl 表達式的版本編寫的腳本:rename s/expression/replacement/g file...
但是您安裝的那個是同時接受正則表達式和替換字元串的那個,正如您看到的錯誤消息所暗示的那樣:
rename [options] expression replacement file...
(算你幸運或聰明,你用它
\;
代替+
.)你可以通過調整你的find
命令來解決這個問題:find . -type f -name 'botrytis_cinerea_T12345.*' -exec rename botrytis_cinerea_T12345 "$i" {} \;
正如 Kusalananda 在評論中指出的那樣,您也在
cd
循環中,但永遠不會回到原始目錄,因此在第一次迭代之後的每次迭代,您都會反复嘗試到cd
一個不存在的目錄。cd
您可能會嘗試通過在之後做另一個來解決此問題find
,但我可能會嘗試通過調整find
自身來避免這種情況:for i in L*; do find "$i" -type f -name 'botrytis_cinerea_T12345.*' -exec rename botrytis_cinerea_T12345 "$i" {} \; done
也可以看看