複数のサブディレクトリのファイルを同じ宛先ディレクトリにコピーする

複数のサブディレクトリのファイルを同じ宛先ディレクトリにコピーする

このようなディレクトリがあります。

Main Directory
     SubDirectory
        SubsubDirectory1
           xx.jpg
           xx,jpg
        SubsubDirectory2
           xx.jpg
           xx,jpg
     SubDirectory
        SubsubDirectory1
           xx.jpg
           xx,jpg
        SubsubDirectory2
           xx.jpg
           xx,jpg
     SubDirectory
        SubsubDirectory1
           xx.jpg
           xx,jpg
        SubsubDirectory2
           xx.jpg
           xx,jpg

SubsubDirectory1のすべてのファイルをターゲットディレクトリにコピーしたいと思います。

ベストアンサー1

ファイル名が一意でない場合

cp "Main Directory"/*/Subsubdirectory1/* destdir

ターゲットの一部のファイルが上書きされます。この場合も失敗します。数千一致するパス名。

この問題を解決するには、GNUを使用してくださいcp

for pathname in "Main Directory"/*/Subsubdirectory1/*; do
    cp --backup=numbered "$pathname" destdir
done

これにより、上書きされるファイルのバックアップ番号が生成されます。

同じことがGNU以外のものを使用している場合cp

for pathname in "Main Directory"/*/Subsubdirectory1/*; do

    # create first stab at destination pathname
    dest="destdir/${pathname##*/}"

    i=0
    while [ -e "$dest" ]; do
        # destination name exists, remove backup number from end of
        # pathname and replace with next one in the sequence
        i=$(( i + 1 ))
        dest="${dest%.~*~}.~$i~"
    done

    cp "$pathname" "$dest"
done

おすすめ記事