次のパターンに従うディレクトリ構造があります。
- Dir 01 (Disc 1) \
- Dir 01 (Disc 1).iso
- Dir 01 (Disc 2) \
- Dir 01 (Disc 2).iso
- Dir 01 (Disc 3) \
- Dir 01 (Disc 3).iso
- Dir 02 (Disc 1) \
- Dir 02 (Disc 1).iso
- Dir 02 (Disc 2) \
- Dir 02 (Disc 2).iso
- Dir 02 (Disc 1) (A) \
- Dir 02 (Disc 1) (A).iso
- Dir 02 (Disc 2) (A) \
- Dir 02 (Disc 2) (A).iso
私の目標は、次のような構造で終わることです。
- Dir 01 \
- Dir 01 (Disc 1).iso
- Dir 01 (Disc 2).iso
- Dir 01 (Disc 3).iso
- Dir 02 \
- Dir 02 (Disc 1).iso
- Dir 02 (Disc 2).iso
- Dir 02 (A) \
- Dir 02 (Disc 1) (A).iso
- Dir 02 (Disc 2) (A).iso
これらのディレクトリを繰り返し、ファイル名を一致させ、すべてを適切な場所に移動する方法が必要であることを知っていますが、スクリプトを作成する方法はわかりません。どんなアドバイスも本当にありがとうございます。
ベストアンサー1
必要なツリー構造を指定したことを考慮してこれに固執します。しかし、ディレクトリとファイル名のいずれにせよ、スペースを避けることが重要であることは、いくら強調しても過度ではありません。スペースを必要とせずにその場で "_"を使用することができる場合は、私たちに知らせれば更新されたツリー構造を提供します。
初期ツリー:
tree
.
├── Dir 01 (Disc 1)
│ └── Dir 01 (Disc 1).iso
├── Dir 01 (Disc 2)
│ └── Dir 01 (Disc 2).iso
├── Dir 01 (Disc 3)
│ └── Dir 01 (Disc 3).iso
├── Dir 02 (Disc 1)
│ └── Dir 02 (Disc 1).iso
├── Dir 02 (Disc 1) (A)
│ └── Dir 02 (Disc 1) (A).iso
├── Dir 02 (Disc 2)
│ └── Dir 02 (Disc 2).iso
└── Dir 02 (Disc 2) (A)
└── Dir 02 (Disc 2) (A).iso
8 directories, 7 files
コマンドで再構成 - コメントを残すことはできますが、必ずコマンドにコピーして貼り付けてください。
find . -type f -iname '*iso' -exec bash -c '
var="$1" ; # found filename variable
bad_dir=$(dirname "$var" | grep -i "disc"); # old directory name variable
good_dir=$(echo "$bad_dir" | cut -d" " -f1,2,5- ) ; # Only acts on dirnames with "disc"
if [[ -n $good_dir ]] ; then
mkdir -p "$good_dir" ; # creates new proper dir
mv "$var" "$good_dir" ; # mv file to new dir
rmdir "$bad_dir" # removes old bad dir
fi
' bash {} \;
新しいディレクトリツリー構造をテストします。
tree .
.
├── Dir 01
│ ├── Dir 01 (Disc 1).iso
│ ├── Dir 01 (Disc 2).iso
│ └── Dir 01 (Disc 3).iso
├── Dir 02
│ ├── Dir 02 (Disc 1).iso
│ └── Dir 02 (Disc 2).iso
└── Dir 02 (A)
├── Dir 02 (Disc 1) (A).iso
└── Dir 02 (Disc 2) (A).iso
4 directories, 7 files
ノート: コマンドを再実行しても、現在の構造が破壊されないことを確認するチェックを追加しました。また、上記は、次のように、より複雑なファイル名とディレクトリ名にも適用されます。
├── Dir 01 (Disc 3) (A) (B) (C)
└── Dir 01 (Disc 3) (A) (B) (C).iso
├── Dir 02 (Disc 1) (A) (B)
└── Dir 02 (Disc 1) (A) (B).iso
次のように再構成されます。
├── Dir 01 (A) (B) (C)
│ └── Dir 01 (Disc 3) (A) (B) (C).iso
└── Dir 02 (A) (B)
└── Dir 02 (Disc 1) (A) (B).iso