複数の「日付」サブフォルダからすべてのcsvファイルを検索し、日付がファイルレベルではなくフォルダレベルにのみあるため、圧縮して構造を保存したいと思います。たとえば、
20200101
A.csv
B.py
20200102
G.csv
D.csv
F.c
だから私もtar
一緒に行きたい
20200101
A.csv
20200102
G.csv
D.csv
私は試した:
ls 20200*/<some regex>.* | xargs -n1 tar -vczf odlists.tar.gz
しかし、ファイルは1つだけ保存されます!
ベストアンサー1
xargs -n1
各パラメータに対するコマンドの実行を示します。したがって、tar
一度に1つのファイルを保存すると、毎回前の保存が上書きされます。
それ以外の場合でも、-n1
コマンドラインの長さの制限によりコマンドが脆弱になる可能性があります。すべてのパラメータを同時に受け付けることができない場合、呼び出しは繰り返され、… | xargs tar …
各繰り返し呼び出しは以前のパラメータを上書きします。tar
を使用して1つ以上のファイルを含むアーカイブを作成し、tar -c
繰り返しを使用してそのファイルに追加できますtar -r
。最初はさまざまなオプションを渡す便利な方法がなく、圧縮されていないアーカイブを作成してから最後に圧縮する必要があるため、これは厄介です。
tarがこの-T
オプションをサポートしている場合は、それを使用して標準入力にファイル名を渡すことができます。これは似ていますxargs
が、コマンドラインの長さに制限はありません。
printf '%s\n' 20200*/*.csv | tar -vczf odlists.tar.gz -T -
あるいは、tarがフィルタリングをサポートしていると仮定すると、それを使用できます。
tar -vczf odlists.tar.gz --exclude='*.' 2020*