ls 出力を grepping するコマンドの置換によりエラーが発生する

ls 出力を grepping するコマンドの置換によりエラーが発生する

コマンド置換を使用してtar.tgzファイルを作成しようとしています。

2012年8月17日のバックアップがあります。

-rw-r----- 1 ossec  502 804M Aug 17  2012 BKPMDISINT_i6nir20j.F_bkp
-rw-r----- 1 ossec  502 2.7G Aug 17  2012 BKPSYFINT_i5nir20j.F_bkp
-rw-r----- 1 ossec  502 3.9G Aug 17  2012 BKPMSFFINT_i4nir20j.F_bkp
-rw-r----- 1 ossec  502  28M Aug 17  2012 c-651746692-20120817-00
-rw-r----- 1 ossec  502 2.0G Aug 17  2012 ALG_KLPFINT_ianir576.alg
-rw-r----- 1 ossec  502 1.5G Aug 17  2012 ALG_KLPFINT_i8nir576.alg
-rw-r----- 1 ossec  502  37M Aug 17  2012 ALG_KLPINT_ibnir64h.alg
-rw-r----- 1 ossec  502 2.2G Aug 17  2012 ALG_KLPFINT_i9nir576.alg
-rw-r----- 1 ossec  502  28M Aug 17  2012 c-651746692-20120817-01
-rw-r----- 1 ossec  502  27M Aug 17  2012 ctrl_170803

だから私はそれらをタールする必要があります。このコマンドを使用しました

tar -zcvf DB-Backup-17082012.tgz $(ls -lrth|grep "8月17日")

しかし、私にはこのようなエラーが発生します。

tar: You may not specify more than one `-Acdtrux' option
Try `tar --help' or `tar --usage' for more information.

ベストアンサー1

これにより、$(ls -lrth|grep "Aug 17")ファイル名だけでなく行全体が引数として取得されるため、tar機能しません。一般的に言えば解析されない出力ls

比較的新しいバージョンのGnu find(> = v4.3.3)がある場合は、次のことができます。

find . -maxdepth 1 -newermt 20120817T0000 -not -newermt 20130818T0000 -print0 \
    | cpio --create --null  --format=ustar \
    | gzip > DB-Backup-17082012.tgz

findこれをサポートしていない場合は、-newermtこれらの日付タイムスタンプを使用して2つのファイルを作成し、-newerを使用できます。もちろんそれも使用できますが、-daystart -mtime 日付を計算する必要があります(または試行錯誤を使用する必要があります)。

私が提案する1つは、ファイルの日付をYYYYMMDD形式で使用することです。まず、同じ文字列(日付基準)で始まる複数のファイルがある場合は、2番目にファイル名(6月5日(ヨーロッパ)または5月6日(アメリカ))を見ている人に応じてソートが良くなります。 05062012はあいまいです。 。したがって、1708年は8月17日に間違いありませんが、DB-Backup-20120817.tgz

おすすめ記事