2011-02-04 6 views
10

tree 명령이 리턴 어떻게 평면 tar 아카이브를

tmp 
`-- t 
    `-- e 
     |-- 23.ps 
     `-- s 
      |-- adsf.ps 
      `-- t 
       `-- dupa.ps 

을 만드는 방법 나는 다음과 같은 구조로 tmp 디렉토리에 아카이브 ps.tar.gz를 만들 수 있습니다

tmp 
|-- ps.tar.gz 
| |-- 23.ps 
| |-- adsf.ps 
| `-- dupa.ps 
`-- t 
    `-- e 
     |-- 23.ps 
     `-- s 
      |-- adsf.ps 
      `-- t 
       `-- dupa.ps 

?

+0

mkdir archive; find t/-name * .ps -exec ln {} 아카이브/\; ; (cd archive && tar zcf ../ps.tar.gz * .ps); rm -rf archive – sastanin

답변

4
outfile=$(pwd)/ps.tar;find . -type f | while read file; do 
    tar rf $outfile -C $(dirname $file) $(basename $file) 
done 
gzip $outfile 
+1

"cd"할 필요가없고 타르의 -C를 사용하십시오! – chris

+0

좋은 포인트 크리스, 그것을 사용하도록 업데이 트되었습니다! – cowsandmilk

+1

위와 같은 작업을 원할 경우 : 찾기. fdir = \'dirname {} \'; tar cfz \ $ archive -C \ $ fdir \ fdir \ $ fname "\; – Qben

11

GNU tar의 경우 --xform 인수를 사용할 수 있습니다. sed 표현식을 취하여 각 파일 이름에 적용합니다. 따라서 모든 문자를 마지막으로 /까지 제거하려면 다음을 사용할 수 있습니다.

tar -c --xform s:^.*/:: your-files 
+0

http://serverfault.com/a/566345/343194와 함께 여러 디렉토리에서 더 나은 결과를 얻을 수 있습니다. 'find와 같은 것 ./commondir -type f | tar --transform 's /.*\/// g'-cvzf ./file.tar.gz --files-from =/dev/stdin'. 이렇게하면 빈 하위 디렉토리가 제외됩니다. –

관련 문제