私は初めてBash、Ubuntu 16.04を使用します。
次のファイルがたくさんあります。
aaaa1111
aaaa1112
aaaa1113
aaaa1114 ...
aaab1111
aaab1112
aaab1113
aaab1114 ...
aaac1111
aaac1112 ... (and so on ...)
とにかくパターンは4桁+数字です。私がしなければならないのは、この4つの文字に基づいてディレクトリを作成し、そのディレクトリにそのファイルを配置することだけです。
例えば、
aaaa1111
aaaa1112
aaaa1113
aaaa1114 ...
aaaa ディレクトリに保存されます。
aaab1111
aaab1112
aaab1113
aaab1114 ...
aaab ディレクトリに保存されます。
「sed」、「mv」などを試しましたが、うまく動作しません。
答え1
for file in [a-z][a-z][a-z][a-z][0-9][0-9][0-9][0-9]; do
mkdir -p "${file:0:4}" && mv "$file" "${file:0:4}"
done
-loopは、for
4文字と4桁の数字を使用して現在のディレクトリのファイル名を繰り返し、file
各ステップで変数にファイル名を割り当てます。
mkdir
宛先ディレクトリを作成します。フラグを使用すると、ディレクトリが-p
すでに存在し、${file:0:4}
現在のファイル名の最初の4文字を保持している場合にエラーメッセージが表示されるのを防ぎます。コマンドが成功すると、ファイルはこのディレクトリに移動されます。
答え2
私はこれが可能だと思います:
cd your_source_dir || exit
for file in *; do
if [[ $(echo "$file" | grep -Pw "[a-z]{4}[0-9]{4}") ]]; then
dir="${file:0:4}"
[[ -d "$dir" ]] || mkdir "$dir"
[[ -f "$file"]] && mv "$file" "$dir/"
fi
done