特定のファイルモードをスキップしたときにTarをコピーする

特定のファイルモードをスキップしたときにTarをコピーする

目的:「.」で始まるすべてのファイルを除くすべてのファイルをコピーするコマンドを作成しようとしています。または「._」

ところで、私はArch Linux 5.19とZSHを使用しています。

シナリオ:私は、正当なファイルと「.」で始まるファイルとフォルダのデフォルトのコピーを含むほぼ1TBのハードドライブを持っています。そして「」。例: ".DS_Store" および ".$RECYCLING_BIN"。これらのファイル形式をクリーンアップして削除する前に、このハードドライブのすべての内容をコピーしてバックアップしたいと思います。しかし、あまりにも多くのファイル形式が生成されるため、コピーに時間がかかります。コピー時には、基本的にこれらのファイルはスキップしてアーカイブしたいファイルだけをコピーしたいと思います。

私はこのコマンドを試しました#1

tar cf --exclude='/.*' - . | pv | (cd ~/test2; tar xf -)

私はこの出力を得る

tar: --exclude=/.*: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
0.00 B 0:00:00 [0.00 B/s] [>                                                             ]0%

そしてこのコマンド#2

tar cf -X .* - . | pv -s $(du -sb ~/test1 | awk '{print $1}') | (cd ~/test2; tar xf -)

出力

tar: -: Cannot stat: No such file or directory
tar: ./-X: file is the archive; not dumped
tar: Exiting with failure status due to previous errors
0.00 B 0:00:00 [0.00 B/s] [>                                                             ]0%            
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

ベストアンサー1

正しいコマンドは

tar --exclude='**/.*' -cf - . | pv -s $(du -sb ~/test1 | awk '{print $1}') | (cd ~/test2; tar xf -)
  1. @doneals24が以前のコメントに投稿したように、-fオプションは作成されたアーカイブの名前なので、ファイル名でダッシュを表示できます。

  2. パターンを有効にするには、オプションがこの--exclude形式に従う必要があります。\*\*/.*

おすすめ記事