ファイル名による一連のディレクトリの命名

ファイル名による一連のディレクトリの命名

EX5_##.bakというファイルのリストがあります。私は各ディレクトリがEX5_##というディレクトリにあることを望みます。
はい

EX5_01.bak
EX5_02.bak
EX5_03.bak

私はそれらをディレクトリに入れたいです。だから私が入力したとき

ls -l

私は得る:

EX5_01
EX5_02
EX5_03

そしてこれらはディレクトリ名であり、そのディレクトリには同じ名前のファイルがあります。私は何をすべきですか?これを達成するためにコマンドまたはBashスクリプトを書くことはできますか?

ベストアンサー1

シンプルなシェルループ:

#!/bin/sh

for file in ./EX5_??.bak; do
    dir=${file%.bak}
    mkdir -p "$dir" && mv -i "$file" "$dir"
done

これはEX5_??.bak現在のディレクトリ内のすべてのファイルに対して繰り返されます(?単一文字と一致)。各ファイルのファイル.bak名からサフィックスを削除してディレクトリ名を作成します${file%.bak}。その後、ディレクトリがまだない場合はディレクトリを作成し、ディレクトリの作成に問題がない場合はファイルをそのディレクトリに移動します。

ファイルをより正確に選択する必要がある場合は、モードを繰り返し使用できます./EX5_[0-9][0-9].bakEX5_AA.bak同様のファイルがある場合に便利です。いいえループに含めたいです。

この-pオプションを使用するmkdirと、ユーティリティはディレクトリがすでに存在するというエラーをエラーとして処理しません(中間ディレクトリも作成しますが、この場合は実際には使用されません)。

この-iオプションを使用すると、mvターゲットディレクトリのファイルを上書きする前に確認を要求します。ここでは安全対策として使用します。

おすすめ記事