まず第一に、あなたのワンライナーは引用の問題でいっぱいです:
$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 ...