Cp

將文件從多個子目錄複製到同一個目標目錄

  • May 16, 2019

我有一個像這樣的目錄

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 中的所有文件複製到目標目錄

如果文件具有非唯一名稱,則

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

引用自:https://unix.stackexchange.com/questions/454441