특정 파일 모드를 건너뛸 때 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이 이 형식을 따라야 합니다.\*\*/.*

관련 정보