1つのフォルダに複数の画像ファイルがあり、各ファイルのフォルダを作成しました。これで、cp
各フォルダに1つのファイルが必要です。
使った
for i in `seq 1 9`; do mkdir $i; done
次に、すべてのファイルをフォルダにコピーします。使ってみよう
for s in Whats* && i in `seq 1 9`;do cp $s $i;done
for s in *; do for i in `seq 1 9`;do mkdir $i;done;cp $s $i;done
これは明らかに動作しません。 (すべてのファイル名はWhatsAppで始まります)
各フォルダに一度に1つずつファイルをコピーする方法は?
答え1
./WhatsApp*
整数名のディレクトリが必要で、各ファイルにパターンと一致するディレクトリがあることを想定してみましょう。
shopt -s nullglob
counter=0
for name in ./WhatsApp*; do
counter=$(( counter + 1 ))
mkdir "$counter" && cp "$name" "$counter"
done
これは、一致する各名前のディレクトリを作成しようとし、成功すると、ファイルをその新しいディレクトリにコピーします。mkdir
ディレクトリがすでに存在する場合、または現在のディレクトリに書き込みおよび実行権限がない場合、呼び出しは失敗します。
nullglob
与えられたパターンと一致する名前がない場合、ループの単一の繰り返し実行を避けるために、ループの前にシェルオプションを設定しました。設定がない場合、nullglob
ループは一度実行され、$name
設定はリテラル文字列に設定されます./WhatsApp*
。