Shell-Script
mv 沒有這樣的文件或目錄?重命名多個目錄中的文件
這部分是因為我對 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 編寫的。