команда tar - пропустити символьні посилання


13

Я використовую команду tar, як:

tar -cvf protTests.tar protTests/*

для tarвсіх файлів всередині папки protTests. Але це включає символьні посилання всередині папки, які не є бажаними.

Чи є варіант командного рядка, який не залишить усіх посилань?

Відповіді:


11

Ви можете зробити це, щоб надати tarсписок усіх файлів всередині, protTestsкрім тих, що є посиланнями:

find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
  tar --null --files-from - -cvf protTests.tar

До речі, ваша існуюча команда:

tar -cvf protTests.tar protTests/*

не буде архівувати всі файли в protTests, він буде архівувати лише ті, імена яких не починаються з .(ті, що не приховано). *Оператор Глоб пропускає файли, імена яких починаються з .дизайном. У команди також є проблема, що якщо protTestsє багато файлів (більше багатьох тисяч), то protTests/*можна розширити на занадто багато аргументів, щоб поміститися в командному рядку.

Простіша така команда не мала б жодної з цих проблем:

tar -cvf protTests.tar protTests

1
Дьоготь не має можливості --files-from, це варіант від gtar, тому ви даєте таку пораду, краще зазначайте, що це специфічно для gtar. Знайти не має первинного -not, це ще один не портативний GNUism. Загалом, погана ідея використовувати окремий виклик пошуку. Це може спричинити проблеми зі смішними символами в імені файлу, і це, безумовно, дає низьку продуктивність, оскільки і пошук, і tar потрібно сканувати файлову систему. Ці проблеми не поширюються на такі програми, як зірка, які використовують libfind і, таким чином, включають код пошуку.
schily

Дозвольте додати ще одну загальну підказку: Коли ви даєте пораду, яка стосується конкретного для постачальника варіанту програми UNIX, добре згадати про постачальника та про те, що він залежить від постачальника. Зазвичай це можна зробити, використовуючи офіційні назви програмного забезпечення, наприклад, gtar замість tar, vim замість vi. Зауважте, що це інформаційна платформа UNIX, тому загалом приклади повинні бути узгоджені зі стандартом POSIX.
schily

Ви праві, @schily, це специфічне рішення для GNU. Ваша відповідь на основі star- хороша альтернатива, і я відмовив її з цієї причини. Я також згоден із запереченням "смішних персонажів", але оскільки у GNU tarнемає -0варіанту, це є компромісом. Я не згоден із запереченням щодо виступу, це насправді не має наслідків у цій ситуації.
Селада

2
@schily, і GNU, tarі bsdtarє, --files-fromі --nullце усуває проблему із забавними персонажами (якщо вони поєднуються з find's -print0або -exec printf '%s\0' {} +). Але тут, можливо, ви хочете додати --no-recursionваріант. Деякі paxреалізації також мають -0можливість.
Stéphane Chazelas

2
@schily Я вважаю, що цей коментарний потік не є місцем адвокації для різних версій tar. Будь ласка, візьміть його до чату . Це вже занадто довго і читати, як релігійна війна. Якщо на даний момент ОП не tarзвучить, я не думаю, що це має значення, яка версія використовується. Ми навіть не знаємо, який тип Unix вони використовують.
Селада

-2

Моя реалізація смоли - найкращий метод

star -cv -f out.tar -find protTests ! -type l

8
zsh: command not found: starКоли ви згадуєте про утиліти, які ви знаєте> 99% ваших читачів не матимуть ваших систем, поясніть, де їх взяти. І ви повинні розкрити свою приналежність, коли ви згадуєте про власний продукт (чи ви публікуєте посилання чи ні, щоб ви могли також розмістити посилання).
Жил 'ТАК - перестань бути злим'

Типова система Linux в наші дні втрачає багато важливого програмного забезпечення після встановлення за замовчуванням, і в той же час встановлюється багато непотрібного програмного забезпечення. Користувач Linux повинен знати, як встановити відсутнє програмне забезпечення, а люди, які часто використовують tar, як правило, мають зірочку.
schily

8
Переважна більшість людей, які часто вживають дьоготь, ніколи не чули про пакс, не кажучи вже про зірку.
Жил "ТАК - перестань бути злим"

Ну, а ті люди, які не знають, що вони використовують gtar в Linux, коли вони називають "дьоготь", мабуть, не люди, яким все одно. Зірка - найдавніша безкоштовна тар-реалізація, і багато функцій, які можна побачити в різних реалізаціях смоли, взяті з зірки, так чому б не поговорити про оригінал?
schily
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.