![すべてのファイルをファイル名の一部の名前付きサブディレクトリに移動します。 [重複]](https://linux33.com/image/142809/%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%AE%E5%90%8D%E5%89%8D%E4%BB%98%E3%81%8D%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%5B%E9%87%8D%E8%A4%87%5D.png)
答え1
これはあなたが必要とする多くの内容にもかかわらず、ほとんどあなたが望むことをします。
#!/usr/bin/env bash
song_dir="$HOME/tmp/songs"
out_dir="$HOME/tmp/org_songs"
[[ ! -d "$out_dir" ]] && mkdir -p "$out_dir"
get_artist () {
local a=($(tr '_' ' ' <<<"$1"))
for i in "${a[@]}"; do
if [[ $i =~ artiste.* ]]; then
printf '%s\n' "${i#*=}"
break
fi
done
}
get_album () {
local a=($(tr '_' ' ' <<<"$1"))
for i in "${a[@]}"; do
if [[ $i =~ album.* ]]; then
printf '%s\n' "${i#*=}"
break
fi
done
}
get_song () {
local a=($(tr '_' ' ' <<<"$1"))
for i in "${a[@]}"; do
if [[ $i =~ song.* ]]; then
printf '%s\n' "${i#*=}"
break
fi
done
}
for song in "${song_dir}/"*.mp3; do
bname=$(basename "$song")
artist=$(get_artist "$bname")
album=$(get_album "$bname")
sname=$(get_song "$bname")
[[ ! -d "${out_dir}/${artist}/${album}" ]] && mkdir -p "${out_dir}/${artist}/${album}"
cp "$song" "${out_dir}/${artist}/${album}/${sname}"
done
使用中:
今後:
$ tree
.
├── script.sh
└── songs
├── artiste=linkin-park_album=meteora_id=02_song=Don't-stay.mp3
├── artiste=linkin-park_album=meteora_id=02_song=Session.mp3
├── artiste=linkin-park_album=meteora_id=02_song=Somewhere-I-Belong.mp3
├── artiste=linkin-park_album=minutes-of-midnight_id=04_song=Bleed-It-Out.mp3
├── artiste=linkin-park_album=minutes-of-midnight_id=04_song=Given-Up.mp3
├── artiste=linkin-park_album=minutes-of-midnight_id=04_song=Leave-out-All-The-Rest.mp3
├── id=01_artiste=eminem_album=recovery_song=cold-wind-blows.mp3
├── id=01_artiste=eminem_album=recovery_song=on-fire.mp3
└── id=01_artiste=eminem_album=recovery_song=talking-2-myself-(feat-kobe).mp3
1 directory, 10 files
後ろに:
$ tree
.
├── org_songs
│ ├── eminem
│ │ └── recovery
│ │ ├── cold-wind-blows.mp3
│ │ ├── on-fire.mp3
│ │ └── talking-2-myself-(feat-kobe).mp3
│ └── linkin-park
│ ├── meteora
│ │ ├── Don't-stay.mp3
│ │ ├── Session.mp3
│ │ └── Somewhere-I-Belong.mp3
│ └── minutes-of-midnight
│ ├── Bleed-It-Out.mp3
│ ├── Given-Up.mp3
│ └── Leave-out-All-The-Rest.mp3
├── script.sh
└── songs
├── artiste=linkin-park_album=meteora_id=02_song=Don't-stay.mp3
├── artiste=linkin-park_album=meteora_id=02_song=Session.mp3
├── artiste=linkin-park_album=meteora_id=02_song=Somewhere-I-Belong.mp3
├── artiste=linkin-park_album=minutes-of-midnight_id=04_song=Bleed-It-Out.mp3
├── artiste=linkin-park_album=minutes-of-midnight_id=04_song=Given-Up.mp3
├── artiste=linkin-park_album=minutes-of-midnight_id=04_song=Leave-out-All-The-Rest.mp3
├── id=01_artiste=eminem_album=recovery_song=cold-wind-blows.mp3
├── id=01_artiste=eminem_album=recovery_song=on-fire.mp3
└── id=01_artiste=eminem_album=recovery_song=talking-2-myself-(feat-kobe).mp3
7 directories, 19 files
また、ファイルを移動するcp
代わりにファイルコピーを使用していることに注意してくださいmv
。まず、コピーを作成し、すべてが正常に機能したらすぐに古いファイルを削除することをお勧めします。そうしないと、一部のデータが混乱したり失われたりする可能性があります。