他のディレクトリに基づいてmkdirを入力する

他のディレクトリに基づいてmkdirを入力する

FLAC形式で抽出したアルバムでいっぱいのカタログがあります。 「アーティスト - アルバム[flac]」というフォルダ名が「アーティスト - アルバム[mp3]」である一致するディレクトリを作成する必要がありますが、特定のフォルダにのみ該当します。

だから"ls | grep Pantera"は私が使用したいディレクトリのリストを提供します...

コマンドラインでこれを行うにはどうすればよいですか?

答え1

xargsを使用すると、あるコマンドの出力を別のコマンドを実行するための引数として使用できますが、スペースや引用の問題のためにls出力を使用することは非常に問題になります。提案を完了するには、生成された名前にスペースが含まれている場合は、次の手順を実行する必要があります。

ls | grep Pantera | sed -e 's/\[flac\]/[mp3]/' | xargs -n1 -i{} mkdir "{}"

しかし、はるかに良いこの目的のために、ツールはfindコマンドと-execオプションを使用します。変数の代わりにリテラル文字列でbashの文字列関数を使用する方法や、1つのコマンドで変数を設定して使用する方法を知っていない場合は、次のものが必要です。ssapkotaの構文プロモーターシェル。

-type dfindを使用するときにディレクトリ一致(または-type fファイル)のみを返すなど、考慮する必要があるオプションもあります。-maxdepth 1再帰照会を実行したい場合は、それを削除できます。パターンマッチングはシナリオに合わせて改善することもできます。

答え2

検索は最高のツールです。ただし、find単一のコマンドのみが許可され、接続はサポートされていません。

以下は、一致するディレクトリ名ごとにサブシェルを分岐して機能するソリューションです。

find -maxdepth 1 -iname "*Pantera*" -exec  \
    bash -c ' name="{}" && mkdir "${name/flac/mp3}" ' \;

答え3

すべてのファイルが同じディレクトリにありますか?その後、単純なループとシェル文字列操作構成を使用できます。

for flac_dir in *Pantera*'[flac]'/; do
  flac_dir=${flac_dir%/}
  mp3_dir="${x%\[flac\]}[mp3]"
  mkdir "$mp3_dir"
done

サブディレクトリ、zsh、またはbash≥4で繰り返し作業するには、for flac_dir in **/*Pantera*'[flac]'/bashを使用してshopt -s globstar最初に実行する必要があります。

関連情報