Grep

過濾到特定深度的路徑

  • December 25, 2016

我正在使用 rsync 和標誌-nPaAXz ~/來檢查要複製哪些文件。

這太冗長了,無法理解。

如何過濾輸出,以便查看要復製到一定深度的文件/文件夾列表,例如:

1 個文件夾深

/home/afile
/home/afolder/
/home/anotherfolder/

2個文件夾深

/home/afile
/home/afolder/afile
/home/afolder/anotherfile
/home/afolder/afolder/
/home/anotherfolder/afile

此命令採用每個路徑並將其截斷到n深度文件夾(在命令部分和 grep 命令部分中定義)\{0,n\}。然後通過管道將其過濾掉重複項。sed``{0,n}``uniq

rsync -nPaAXz src_dir dst_dir | sed -n 's@^\(\([^/][^/]*/\)\{0,2\}\).*@\1@p' | uniq

同樣的事情也可以使用grep

rsync -nPaAXz src_dir dst_dir | grep -oE "^([^/]+/){0,2}"

儘管由於錯誤,上述內容不適用於GNU grep版本。< 2.5.3

以下 grep 將 rsync 的詳細輸出限制為 2 個文件夾的深度:

rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'

{0,2}將上面的內容更改{0,3}為過濾掉 3 個深度文件夾。{0,4}將過濾掉 4 個文件夾等。

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