-nPaAXz ~/
コピーするファイルを確認するためにrsyncとフラグを使用しています。
理解するには長すぎます。
特定の深さにコピーされるファイル/フォルダのリストを表示するために出力をフィルタリングするにはどうすればよいですか?たとえば、次のようになります。
フォルダ1つ
/home/afile
/home/afolder/
/home/anotherfolder/
フォルダ2つの深さ
/home/afile
/home/afolder/afile
/home/afolder/anotherfile
/home/afolder/afolder/
/home/anotherfolder/afile
答え1
次のgrepは、rsyncの詳細出力を2つのフォルダの深さに制限します。
rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'
{0,2}
上記を変更して{0,3}
3つのフォルダをフィルタリングします。{0,4}
4つのフォルダの深さなどをフィルタリングします。
答え2
このコマンドは各パスを取得し、n
深いフォルダ(\{0,n\}
コマンドセクションsed
と{0,n}
grepコマンドセクションで定義)に切り捨てます。その後、パイプを介して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
抜け穴。
答え3
この場合、出力をフィルタリングするだけで、何らかの方法で値を再利用することには興味がありません。まあ、簡単です。必要以上にスラッシュを含む行を見つけます。
答え4
rsync -nPaAXz src_dir dst_dir | cut -d "/" -f 1-4 | awk '!x[$0]++'
cut は 4 つのフォルダー深度パスの後のすべての項目を削除し、awk は重複項目を削除します。