これは、部分的に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
文の文脈外に適用されますか?
答え1
適切なツールを使用して正規表現を保存できる単純な欠陥のあるシェルスクリプトを使用しているようです。
rename -n 's/-*$//' 2018*/*
-n
実際に名前を変更するのに十分な出力がある場合は、スイッチを削除してください。
これを行うこともできないかもしれない同じ名前の他のツールがあるので注意してください。
パッケージの一部である名前変更コマンドはutil-linux
そうではありません。
次のコマンドを実行すると:
$ rename
ご覧perlexpr
のとおり、これが正しいツールのようです=)
そうでない場合は、それをデフォルト値に設定し(通常はすでに適用されている)、Debian
次のように派生しますUbuntu
。
$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename
ArchiLinuxの場合:
pacman -S perl-rename
RedHatシリーズディストリビューションの場合:
yum install prename
'prename'パッケージは次の場所にあります。エッフェルリポジトリ。
Gentooの場合:
emerge dev-perl/rename
*BSDの場合:
pkg install gprename
またはp5-File-Rename
Macユーザーの場合:
brew install rename
他のディストリビューションにこのコマンドがない場合は、パッケージマネージャを検索してインストールするか、手動で行う(学科がありません...)
このツールはもともとPerlの父親であるLarry Wallによって書かれました。