Bash 消去履歴コンテンツフォルダ

Bash 消去履歴コンテンツフォルダ

最新の「date_YYYY-MM-DD_HHMMSS」ディレクトリを維持し、他のディレクトリを削除するにはbashスクリプトが必要です。

ディレクトリ構造は次のとおりです。タグのディレクトリは変更可能であり、本番、ステージング、開発などの「環境」が変更されます。具体的には「商品名」をあらかじめ知ることはできません

/home/'USER'/'ENVIRONMENT'/Content/'productname'/'date_YYYY-MM-DD_HHMMSS'

頑張った

ls -t  .\directory | tail -n +1

そして

find .\directory type f -mtime +1 

(今は本当に精神のない時間で、最後の数日だけ保管できて嬉しいです)

そして

find . -maxdepth 6 -mindepth 5 -type f -printf '%f\n'

たとえば、次のような場合

/home/USER1/production/Content/productname1/date_20151009_120000
/home/USER1/production/Content/productname1/date_20151010_120000
/home/USER1/production/Content/productname2/date_20151009_120000
/home/USER1/production/Content/productname2/date_20151010_120000
/home/USER1/production/Content/productname1/date_20151009_120000
/home/USER1/production/Content/productname1/date_20151010_120000
/home/USER1/staging/Content/productname2/date_20151009_120000
/home/USER1/staging/Content/productname2/date_20151010_120000

続けます

/home/USER1/production/Content/productname1/date_20151010_120000
/home/USER1/production/Content/productname2/date_20151010_120000
/home/USER1/staging/Content/productname2/date_20151010_120000

答え1

awkとの組み合わせを使用してxargsこれを達成できます。

sort -r directories | awk -F/ 'cache[$3, $4, $6]++' | xargs -L1 rm -rf

directoriessort -r directoriesパイプ(たとえば)に簡単に置き換えることができるすべてのディレクトリを含むファイルprintf "%s\n" /home/*/*/Content/*/* | sort -r

sort -rリストの「先頭」にディレクトリを配置します(日付をアルファベット順に比較できることを利用します。そうでない場合は、まず日付を正しく解析する必要があります)。最後に計算を実行すると、最初に表示される(、、、)は印刷されず、awkその後のすべての項目が印刷されます。削除するディレクトリのリストを作成してから、/を介してそのディレクトリを削除します。userenvironmentproductxargsrm

注:ファイル名/ディレクトリにスペースまたは「奇妙な」文字が含まれていると正しく機能しないため、コマンドを変更する必要があります。


awk -F/ 'cache[$3, $4, $6]++'効果は何ですか?まず、入力行を分割します/。次に、各入力行に関連配列の3番目、4番目、6番目の値を含むタプルがあることを確認しますcache。タプルが最初に表示されると、配列にないためcache[$3, $4, $6]返されるので、0行は削除され、に設定さ++cache[$3, $4, $6]ます1。次回タプルが表示されると、cache[$3, $4, $6]何かが返されます> 0。これは、対応する行が印刷されることを意味します。

簡単な例は次のとおりです。

$ cat example
a,c,0
a,a,2
c,a,0
a,b,2
b,a,2
a,b,0
c,a,1
b,b,0
a,b,1
a,a,1
a,a,0
b,a,1
b,c,2
b,b,2
b,c,1
a,c,1
c,c,1
$ awk -F, 'cache[$1, $2]++' example
a,b,0
c,a,1
a,b,1
a,a,1
a,a,0
b,a,1
b,b,2
b,c,1
a,c,1
$ fgrep a,b example
a,b,2
a,b,0
a,b,1
$

a,b,2線がどのように落ちるがa,b,0落ちa,b,1ないかを確認してください。連想配列と++演算子の使用は非常に一般的なパターンですawk43. 重複して連続していない行の削除

関連情報