Shell-Script

mv 沒有這樣的文件或目錄?重命名多個目錄中的文件

  • June 21, 2020

這部分是因為我對 BASH 的了解很淺。

這是腳本:

eighteen=(2018*/*)
newe=`echo "$eighteen" | sed -e 's/\(-\)*$//g'`

while read f <&3 && read nf <&4; do     
   mv -v "${f}" "${nf}"
   break
done 3<"$eighteen" 4<"$newe"

我正在嘗試補償我編寫的糟糕腳本,並刪除-多個子文件夾中每個文件名末尾的符號。

和我得到的錯誤:./cleanup.sh: line 16: 2018-08-13/untitled-102.arw: No such file or directory

值得注意的是,錯誤不是來自mv行,而是來自:done 3<"$eighteen" 4<"$newe".

我從 StackExchange 上的答案中複製了 while 循環。快餐,通常,不利於消化,快速解決方法——為了理解,請幫助我理解。給我一個關於如何呼叫前面提到的替換的提示4<"$newe" nf <&4,我應該如何搜尋以了解更多資訊。它是否應用在while語句上下文之外?

您似乎使用了一個簡單的錯誤 shell 腳本,您可以在其中使用正確的工具,保留您的正則表達式:

rename -n 's/-*$//' 2018*/*

-n當輸出看起來不錯以真正重命名時刪除開關。

人重命名

警告 還有其他同名的工具可能會也可能不會這樣做,所以要小心。

作為包的一部分的重命名命令util-linux不會。

如果您執行以下命令:

$ rename

你看perlexpr,那麼這似乎是正確的工具 =)

如果不是,則使其成為預設值(通常已經如此)Debian和衍生,例如Ubuntu

$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename

對於archlinux:

pacman -S perl-rename

對於 RedHat 系列發行版:

yum install prename

‘prename’ 包位於EPEL儲存庫中。


對於 Gentoo:

emerge dev-perl/rename

對於 *BSD:

pkg install gprename

或者p5-File-Rename


對於 Mac 使用者:

brew install rename

如果您在其他發行版中沒有此命令,請搜尋您的包管理器以安裝它或手動執行(無依賴…)


這個工具最初是由 Perl 的父親 Larry Wall 編寫的。

引用自:https://unix.stackexchange.com/questions/594125