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].bak
。EX5_AA.bak
同様のファイルがある場合に便利です。いいえループに含めたいです。
この-p
オプションを使用するmkdir
と、ユーティリティはディレクトリがすでに存在するというエラーをエラーとして処理しません(中間ディレクトリも作成しますが、この場合は実際には使用されません)。
この-i
オプションを使用すると、mv
ターゲットディレクトリのファイルを上書きする前に確認を要求します。ここでは安全対策として使用します。