"동적" 전체 경로를 제거하기 위해 tar를 사용할 수 있습니까?

"동적" 전체 경로를 제거하기 위해 tar를 사용할 수 있습니까?

다른 디렉토리에 일부 mp3가 있습니다. 나

find $HOME -name *.mp3|pax -wf arch.tar

명령은 제대로 작동하지만 추출 시 전체 디렉터리가 다시 생성됩니다.

tar -tvf arch.tar

반품

dir1/dir2/sound.mp3
dir3/music.mp3
dir4/dir5/anotherdir/anothermusic.mp3

물론 추출할 때 많은 디렉토리가 생성됩니다. 내 소원은 이것이다

find $HOME -name *.mp3|pax -w"possibleoption" -f arch.tar

이런 파일을 받으세요

/sound.mp3
/music.mp3
/anothermusic.mp3

이것이 안전하지 않다는 것을 알고 있지만 dir 경로를 동적으로 삭제할 수 있습니까?

ps= 예를 들어 pax 명령을 사용했는데 클래식 tar도 잘 작동합니다.

답변1

이러한 변형은 모두 사용자가 아카이브를 생성하고 아카이브 자체에 원래 경로를 저장했다고 가정합니다. 아카이브를 나열/추출할 때 경로를 변환합니다.

pax해당 플래그와 함께 사용됩니다 -s.

pax -f archive.tar -s '@.*/@/@' '*.mp3'

-r실제로 파일을 추출하기 위해 처음에 추가되었습니다 .

BSD 사용 tar:

tar -tf archive.tar -s '@.*/@/@' '*.mp3'

실제로 파일을 추출 -t하도록 변경합니다 .-x

GNU 사용 tar:

tar -tPf archive.tar --transform 's@.*/@/@' --show-transformed-names --wildcards '*.mp3'

실제로 파일을 추출 -t하도록 변경합니다 .-x

문자열 교체는 아카이브에 저장된 경로를 제거하고 단일 /.


표준 입력에서 경로 이름을 읽는 파일을 사용하여 아카이브를 생성하는 것과 동일한 작업(경로를 로 바꿔 이름 변환 /):

pax:

pax -w -f archive.tar -s '@.*/@/@'

BSD tar:

tar -c -f archive.tar -s '@.*/@/@'

그누 tar:

tar -c -f archive.tar --transform='s@.*/@/@' --files-from=-

관련 정보