Вы можете сделать это, чтобы предоставить 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
, а только те, чьи имена не начинаются .
(те, которые не скрыты). Оператор *
glob пропускает файлы, имена которых начинаются с .
конструкции. У команды также есть проблема, заключающаяся в том, что если в protTests
ней много файлов (более многих тысяч), то она protTests/*
может быть расширена до слишком большого числа аргументов, чтобы поместиться в командной строке.
У более простой команды, подобной этой, не было бы ни одной из этих проблем:
tar -cvf protTests.tar protTests
--files-from
, это вариант от gtar, так что из вас дайте такой совет, лучше упомянуть, что это специфично для gtar. Поиск не имеет первичного-not
, это еще один непереносимый GNUism. В общем, плохая идея использовать отдельный вызов find. Это может вызвать проблемы с забавными символами в имени файла, и это определенно дает низкую производительность, так как find и tar должны сканировать файловую систему. Эти проблемы не относятся к таким программам, как star, которые используют libfind и, следовательно, имеют встроенный код поиска.