목표: "."로 시작하는 모든 파일을 제외한 모든 파일을 복사하는 명령을 만들려고 합니다. 또는"._"
그런데 저는 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
이 이 형식을 따라야 합니다.\*\*/.*