将多个子目录中的文件复制到同一目标目录

Mos*_*ein 0 cp file-copy

我有一个像这样的目录

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
Run Code Online (Sandbox Code Playgroud)

我想将所有 SubsubDirectory1 中的所有文件复制到目标目录

Kus*_*nda 5

如果文件的名称不唯一,则

cp "Main Directory"/*/Subsubdirectory1/* destdir
Run Code Online (Sandbox Code Playgroud)

会覆盖目的地的一些文件。如果有数千个匹配的路径名,这也会失败。

为了解决这个问题,使用 GNU cp

for pathname in "Main Directory"/*/Subsubdirectory1/*; do
    cp --backup=numbered "$pathname" destdir
done
Run Code Online (Sandbox Code Playgroud)

这将为文件创建编号备份,否则这些备份将被覆盖。

同样的事情,但使用非 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
Run Code Online (Sandbox Code Playgroud)