Створення tar-архіву без включення батьківського каталогу, коли файли зберігаються в різних каталогах


11

У файловій системі у мене є такі чотири файли:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Мені потрібно помістити ці файли в архів tar, але я не хочу додавати каталоги. Найкраще, що я міг придумати, це:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Це все ще не ідеально, тому що кожен файл в архіві має два каталоги. Чи є кращий спосіб? Або я просто скопіювати s1, s2, r3і r5файли в один каталог і створити архів з tar -czvf archive.tgz s1 s2 r3 r5?

Відповіді:


17

Ви можете використовувати -Cкілька разів (переміщення з одного каталогу в інший):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Зауважте, що кожен -Cваріант інтерпретується відносно поточного каталогу в цьому пункті (або ви можете просто використовувати абсолютні шляхи).


11

Якщо у вас є список файлів у файлі, або ви можете їх генерувати за допомогою команди, ви можете використовувати одну команду tar tar GNU:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

Трансформація все ще зберігає каталоги, але повністю розгладжує макет. Тож вам потрібен певний спосіб фільтрації каталогів, звідси необхідність списку файлів.


8

Ви можете додавати файли до архіву один за одним:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Ви можете це зробити сценарієм для спрощення: для кожного шляху запустіть tar rfбазовий каталог як значення для -Cпараметра та ім'я базового файлу без шляху додання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.