Вы можете сделать это, чтобы предоставить 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 и, следовательно, имеют встроенный код поиска.