rsync -a deleteを使用して、多数のファイルを含むディレクトリを削除します。

rsync -a deleteを使用して、多数のファイルを含むディレクトリを削除します。

というディレクトリがありますが、crmlogsどのようにrsync -a --delete削除しますか?

mkdir emptydir
rsync -a --delete ./emptydir ./crmlogs

答え1

~によるとlinuxnote.net Webアーカイブrsync -aP –delete empty/ ./dirまたは を使用するよりも約3倍速い大容量ディレクトリを削除する最速の方法です。rm -rfv ./dirfind 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\rNR%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コピーを入れてください。foobar

あなたの後続の意見で判断すると、実際にディレクトリを削除したいのか、crmlogsそれともソースに存在しなくなる可能性のあるログファイルを消去したいのかはわかりません。その場合--delete、そのファイルが元のフォルダから削除された場合、このスイッチは機能します。

関連情報