同じ名前のファイルをコピーしてください。

同じ名前のファイルをコピーしてください。

ディレクトリがあります

--dir1
    image1
    image2
    image3
--dir2
    image1
    image2
    image3
--dir3
    image1
    image2
    image3

すべてのディレクトリのすべてのファイル(同じ名前を持つ)を新しい名前の新しいディレクトリにコピーし、1から最後まで順番に番号を付けたいと思います。

どうすればいいですか?

このファイルは古いフィルムからスキャンした画像なので、デジタルフィルムに追加する必要があります。何千ものあります…

ベストアンサー1

シェルを使用して、特定の数値形式でbash新しい名前のディレクトリにファイルをコピーします。destdirnnnnnn.jpgn

コピーしたいすべてのファイルがdir*/image*あなたの例のように単一のワイルドカードパターンと一致すると仮定します。

#!/bin/bash

shopt -s nullglob

num=0
mkdir -p destdir || exit

for name in dir*/image*; do
    num=$(( num + 1 ))
    printf -v newname 'destdir/%.6d.jpg' "$num"
    cp "$name" "$newname"
done

テスト:

$ tree
.
|-- dir1
|   |-- image1
|   |-- image2
|   |-- image3
|   |-- image4
|   `-- image5
|-- dir2
|   |-- image1
|   |-- image2
|   |-- image3
|   |-- image4
|   `-- image5
|-- dir3
|   |-- image1
|   |-- image2
|   |-- image3
|   |-- image4
|   `-- image5
`-- script

3 directories, 16 files
$ ./script
$ tree
.
|-- destdir
|   |-- 000001.jpg
|   |-- 000002.jpg
|   |-- 000003.jpg
|   |-- 000004.jpg
|   |-- 000005.jpg
|   |-- 000006.jpg
|   |-- 000007.jpg
|   |-- 000008.jpg
|   |-- 000009.jpg
|   |-- 000010.jpg
|   |-- 000011.jpg
|   |-- 000012.jpg
|   |-- 000013.jpg
|   |-- 000014.jpg
|   `-- 000015.jpg
|-- dir1
|   |-- image1
|   |-- image2
|   |-- image3
|   |-- image4
|   `-- image5
|-- dir2
|   |-- image1
|   |-- image2
|   |-- image3
|   |-- image4
|   `-- image5
|-- dir3
|   |-- image1
|   |-- image2
|   |-- image3
|   |-- image4
|   `-- image5
`-- script

4 directories, 31 files

常にバックアップされたデータに対してこれらのタスクをテストしてください。

dir*結果が満足な場合は、そのディレクトリを削除してください。

おすすめ記事