まず第一に、あなたのワンライナーは引用の問題でいっぱいです:
$dir
ディレクトリ名に空白が含まれていると壊れます。"$dir"
代わりに必要です
一重引用符は変数の展開を防ぎます -'*_$year-$month-*'
おそらくそうあるべき"*_$year-$month-*"
です。
シェル スクリプト コードでfind
は、 はどのファイルとも一致しないため (文字列 を含むファイル名はあり_$year-$month-
ませんよね?)、したがってtar
、アーカイブに含めるファイルは提供されません。
補足としてxargs
、この特定のケースでの使用は危険です。ファイルが多すぎる場合、が複数回xargs
呼び出され、最後に実行された以外のアーカイブされたファイルは上書きされるため、アーカイブから消去されます。tar
さらに、このコマンドは、空白を含むファイル パスでも中断されます。デフォルトでxargs
は、引数の区切り文字として空白が使用されます。find
使用しているおよびxargs
バイナリのバージョンによっては、この問題に対処-print0
するための検索オプションと一致-0
オプションがある場合があります。xargs
find ... -print0 | xargs -0 ...
最後に、一部のxargs
バージョンには、引数が指定されていない場合に指定されたコマンドの呼び出しを回避するオプションがあります-GNU の場合、これxargs
が-r
オプションです:
find ... -print0 | xargs -0 -r ...