Awk

將帶有父文件夾的文件複製到新目錄

  • May 21, 2015

我想複製一些文件並在此過程中包含它們的父目錄。

目前的結構類似於:

/Module1/A/downloads/m13312/file.pdf
/Module1/A/downloads/m17312/file.pdf
/Module1/B/downloads/m18312/file.pdf
/Module2/A/downloads/m19312/file.pdf

我想抓住路徑的最後兩部分,以便最終得到:

/mydir/m13312/file.pdf
/mydir/m17312/file.pdf
/mydir/m18312/file.pdf
/mydir/m19312/file.pdf

我嘗試使用cutawk獲得正確的結果,但我似乎無法獲得正確返回的路徑。這是一個僅回應我需要的範例(我還沒有到複製部分):

find . -type 'f' -path '*downloads*' -print0 | xargs -0 -I {} echo `cut -d/ -f4-5 <<<{}`

這只是列印出整個路徑,所以我知道我還不能使用它。

如果您pax支持該-0選項:

find . -type 'f' -path '*downloads*' -print0 |
 pax -rw0s'|.*downloads/||' /mydir

這應該這樣做:

for file in /Module*/*/downloads/m13312/file.pdf
do
   file_directory="/mydir/$(basename "$(dirname "$file")")"
   mkdir -p "$file_directory"
   cp "$file" "$file_directory"
done

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