나에게 문제가 있는 것 같다. 현재 디렉토리에 몇 가지 다른 파일 형식이 있는데 그냥 원합니다.아스팔트이것.png문서. 이것이 내가 시작한 방법입니다.
find -name "*.png" | tar -cvf backupp.tar
어떤 파일을 지정하지 않았기 때문에 작동하지 않았으므로 다른 사람들이 어떻게 했는지 확인하기 위해 xargs를 추가했습니다.
find -name "*.png" | xargs tar -cvf backupp.tar
이번에는 제대로 작동하여 backupp.tar 파일이 생성되었지만 여기에 문제가 있습니다. 추출이 안되는 것 같네요. 내가 입력할 때마다:
tar -xvf backupp.tar
아무 일도하지. chmod와 sudo를 변경해 보았지만 아무것도 작동하지 않습니다.
그렇다면 제가 명령을 완전히 잘못 입력한 걸까요, 아니면 뭔가를 놓친 걸까요?
답변1
두 방법 모두 유효에 가깝지만 각각에는 명백한 문제가 있습니다.
첫 번째 방법에서는 파일 목록을 .stdin에서 읽으 tar
려면 / 및 옵션을 tar
사용해야 합니다 .-T
--files-from
-
find -name '*.png' -print0 | tar -cvf backup.tar --null -T -
참고로 공식 문서를 참조하세요:
노트:-print0
및 플래그를 사용하면 --null
공백이 포함된 파일 이름도 처리할 수 있는지 확인해야 합니다.
tar
두 번째 방법에서는 via 를 통해 실행하려고 xargs
하지만 "create" 옵션( --create
/ -c
)을 사용하고 있습니다. for 루프나 for 루프 내부에서 "create" 옵션을 사용하면 xargs
반복할 때마다 아카이브를 덮어씁니다. 대신 추가 옵션( -a
/ --append
) 또는 업데이트 옵션( -u
/ --update
)을 사용해 보세요. 예를 들면 다음과 같습니다.
find -name "*.png" -exec tar -uvf backupp.tar {} \;
이렇게 하면 파일을 덮어쓰는 대신 각 반복 후에 아카이브에 파일이 추가됩니다.
어느 쪽이든 작업이 완료되면 목록 옵션( --list
/ -t
)을 사용하여 아카이브의 내용을 보고 모든 것이 예상대로 작동하는지 확인할 수 있습니다.
tar tf backupp.tar
답변2
간단히 와일드카드를 사용할 수 있습니다.
tar -cvf backup.tar *.png
또는 사용하여find
find -name "*.png" | tar -cvf backup.tar -T -
이 -T
옵션은 FILE에서 파일 이름을 가져옵니다(이 경우 stdin).-