というディレクトリがありますが、crmlogs
どのようにrsync -a --delete
削除しますか?
mkdir emptydir
rsync -a --delete ./emptydir ./crmlogs
答え1
~によるとlinuxnote.net Webアーカイブrsync -aP –delete empty/ ./dir
または を使用するよりも約3倍速い大容量ディレクトリを削除する最速の方法です。rm -rfv ./dir
find b/ -type f -delete
詳細な出力は-P
時間がかかったり、永久に空のプロンプト行を見つめることができるので便利です。
awk
エンドレススクロールを避けるために、次のように1行(ラインカウンタを含む)に出力を表示するようにSTDOUTをリダイレクトしました。
rsync -aP --delete ./emptyDir/ ./dir/ | awk ' { printf ( "\r #%4d: %-200s", NR, $0 ) } '
スキップするために使用されます許可が拒否されましたいいですね。 sudoを使用してください。
sudo rsync -aP --delete ./emptyDir/ ./dir/ | awk'{printf("\r #%4d: %-200s",NR,$0)}'
説明:STDOUTだけではキャプチャできないawk
ため、ライン#カウンタと右パッドライン#の場合は出力ラインの先頭にカーソルを設定し、200文字の出力文字列の場合、右パッドは前のラインを上書きします(ターミナルウィンドウは次の位置にあります)場合)。最小この幅は200です)printf
\r
NR
%4d
%-200s
答え2
スイッチは、--delete
ソースに存在しないファイルをターゲットから削除します。を削除するには、そのディレクトリをcrmlogs
含まないソースからコピーする必要があります。あなたの例rsync
は、ルートの下の2つのディレクトリ間の使用方法を示しています。この例を見ると、わかりやすくなります/tmp
。
/tmp $ cd tmp
/tmp $ mkdir foo
/tmp $ mkdir bar
/tmp $ mkdir bar/crmlogs
/tmp $ rsync -a --delete foo/ bar/
/tmp $ ls -l bar
total 0
drwxr-xr-x 2 mint mint 40 Jan 10 23:19 ./
drwxrwxrwt 10 root root 220 Jan 10 23:19 ../
参考にするか、rsync -a --delete foo bar
下にrsync -a --delete ./foo ./bar
コピーを入れてください。foo
bar
あなたの後続の意見で判断すると、実際にディレクトリを削除したいのか、crmlogs
それともソースに存在しなくなる可能性のあるログファイルを消去したいのかはわかりません。その場合--delete
、そのファイルが元のフォルダから削除された場合、このスイッチは機能します。