
私のメディアディレクトリ構造は次のとおりです。
~ $ tree baz
baz
├── Ajin [Season 1]
│ ├── Ajin Demi-Human - 01 - A Topic That Has Nothing to Do with Us.mkv
│ ├── Ajin Demi-Human - 02 - Why Is This Happening to Me I Didn`t Do Anything Wrong!.mkv
...snip...
├── Btooom!
│ ├── Btooom! - 01 - Start.mkv
│ ├── Btooom! - 02 - The Bloodstained High School Girl.mkv
...snip...
└── Claymore [Dual Audio]
├── checksums.md5
├── Claymore - 01 - Great Sword.mkv
├── Claymore - 02 - The Black Card.mkv
├── Claymore - 03 - The Darkness in Paradise.mkv
...snip...
3 directories, 53 files
ディレクトリを循環し、baz
各サブディレクトリに対して「Season 01」というサブサブディレクトリを作成し、すべてのファイル(およびすべてのディレクトリ)を新しく作成したサブサブディレクトリ「Season 01」に入れる必要があります。
たとえば、上記は次のとおりです。
baz
├── Ajin [Season 1]
│ ├── Season 01
│ ├── Ajin Demi-Human - 01 - A Topic That Has Nothing to Do with Us.mkv
│ ├── Ajin Demi-Human - 02 - Why Is This Happening to Me I Didn`t Do Anything Wrong!.mkv
...snip...
etc
これを実行しようとしていますが、find
-execコマンドを設定して「Season 01」ディレクトリを作成し、そのディレクトリの内容を新しいディレクトリに移動する方法がわかりません。
ありがとう
答え1
必要なのは単純なループだけです。
cur=$(pwd)
for i in baz/*
do
cd "$i"
mkdir season1
mv *.mkv season1
cd "$cur"
done
答え2
使用bash
:
shopt -s dotglob
for i in baz/*/*; do
mkdir -p "${i%/*}/Season 01"
mv "$i" "${i%/*}/Season 01"
done
まず、dotglob
隠しファイルの一致も有効にします。その後、baz
サブディレクトリのファイルを繰り返します。
Season 01
ディレクトリがまだ存在しない場合は、ディレクトリが作成されます。パラメータ拡張は${i%/*}
ファイル名を削除し、親ディレクトリ(たとえばbaz/Ajin [Season 1]
)を保持します。- 現在のファイルを
"$i"
シーズンディレクトリに移動します。