
タグの末尾に「(完了)」とマークされたディレクトリのリストがあります。
例:「フォルダ1(完了)」
rename コマンドを使用して各ディレクトリから「(done)」を削除したいと思います。特殊文字なのでエスケープ文字を使用します。
rename s/\(Done\)//g *
ただし、このコマンドは機能しません。 「done」という単語を削除し、「Folder 1()」角かっこを残します。
答え1
\
シェル構文の参照演算子なので、次のようになります。
rename s/\(Done\)//g *
実行と同じ:
rename 's/(Done)//g' *
andは、(
文字通り処理するためにプレフィックスを付けるか、andに変更する必要がある)
Perl正規表現構文rename
の特殊文字です。\
[(]
[)]
ここで欲しいものは次のとおりです。
rename 's/\s*\(Done\)//g' ./*
また、ここに追加されたのは、前のスペースとプレフィックスの\s*
削除です。のいくつかの変形は 。(Done)
./
rename
-
答え2
これは働きます:
rename 's/\(.*\)|\[.*\]//g' *
それ以外の場合、rename
コマンドは使用されません(OT)。
for file in folder*; do
mv "$file" "${file/\(Done\)/}"
done
答え3
使用find
:
find topdir -maxdepth 1 -type d -name '* (Done)' -exec sh -c '
for pathname do
mv "$pathname" "${pathname%" (Done)"}"
done' sh {} +
find
これは名前の末尾にあるディレクトリを選択し、標準パラメータ置換を使用してその文字列を削除します。␣(Done)
ターゲット名を持つディレクトリ/ファイルが同じディレクトリに存在しないことを確認するためのチェックは行われません。
上記のスクリプトはsh -c
テスト目的でいくつかの変更を加えてスタンドアロンで実行することもできますfind
。
for pathname in topdir/*' (Done)'/; do
mv "$pathname" "${pathname%' (Done)/'}"
done