複数のディレクトリの名前を変更するには、 rename コマンドを使用します。名前には括弧が含まれます。

複数のディレクトリの名前を変更するには、 rename コマンドを使用します。名前には括弧が含まれます。

タグの末尾に「(完了)」とマークされたディレクトリのリストがあります。

例:「フォルダ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

関連情報