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

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

我有一个像这样的目录

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

答案2

尝试这个:

cp mainDir/*/SubsubDirectory1/* <destination_path>

注意:文件名必须不同。

相关内容