Grep
過濾到特定深度的路徑
我正在使用 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 個文件夾等。