目的:「.」で始まるすべてのファイルを除くすべてのファイルをコピーするコマンドを作成しようとしています。または「._」
ところで、私は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 -)
@doneals24が以前のコメントに投稿したように、
-f
オプションは作成されたアーカイブの名前なので、ファイル名でダッシュを表示できます。パターンを有効にするには、オプションがこの
--exclude
形式に従う必要があります。\*\*/.*