Bash
如何遞歸複製目錄中的所有文件並即時解壓縮壓縮文件
我在一個包含許多子目錄的目錄中有大量標準/壓縮文件。
現在,我需要將此結構化目錄和所有內容(文件和子目錄)複製到另一個磁碟並解壓縮所有壓縮文件。
因此,為了節省時間,我想遞歸地複制目錄中的所有文件並即時解壓縮壓縮文件。
我怎樣才能做到這一點?
我會將其作為 3 個單獨的步驟來處理,使用
$SOURCE
和$DEST
作為您的源目錄和目標目錄。
- 在目標目錄中重新創建源目錄結構
find $SOURCE -type d | sed -e "s~^$SOURCE~~" | xargs -r -I dir mkdir -p "$DEST"/"dir"
2. 移動所有不需要解壓的文件
find $SOURCE -type f -not -name '*.gz' | sed -e "s~^$SOURCE/~~" | xargs -r -I file cp "$SOURCE"/"file" "$DEST"/"file"
3. 將所有壓縮文件解壓到目標目錄
find $SOURCE -type f -name '*.gz' | sed -e "s~^$SOURCE~~" | sed -e "s~.gz$~~" | xargs -r -I file bash -c 'gzip -dc "'"$SOURCE"'"/"file".gz > "'"$DEST"'"/"file"'
也就是說,作為一個建議,我建議使用
rsync -av
複制所有文件,然後find . -name '*.gz' -exec gunzip \{\} \;
在目標目錄中解壓縮文件。這是一種更簡單的方法,潛在的陷阱更少。(上面的三個步驟對我來說適用於文件數量有限且文件名相對簡單的小型測試目錄;YMMV 用於更複雜的案例。)