3

Я должен был заархивировать каталог с помощью tar и исключить некоторые файлы. У меня есть каталог $ HOME/java, который включает в себя некоторые файлы .java и .class. Я хочу исключить все файлы .class, используя опцию -X exclude.

Я создал файл исключения с помощью команды find

$ find $HOME/java -name "*.class" > Exclude

Затем попытался заархивировать каталог

$ tar -cvfX java.tar Exclude $HOME/java

Но как-то это не исключает. Версия tar в Solaris не поддерживает исключение по имени.

5 ответов5

4

Ваш синтаксис совершенно корректен для Solaris-версии tar, на самом деле я только что попробовал его на Solaris 8 и 10 как пользователь root и не пользователь root.

Вы уверены, что это не исключало? В режиме подробного режима -v исключенный файл по-прежнему отображается в списке и говорит "исключено" вместо размера в качестве последнего поля.

Есть ли сообщения об ошибках? Если он не может найти или прочитать исключаемый файл, он скажет так ....

 tar c[BDeEFhilnopPqTvw@[0-7]][bfk][X...] [blocksize]
     [tarfile] [size] [exclude-file]...
     {file | -I include-file | -C directory file}...
3
 tar -cvf java.tar --exclude="*.class" $HOME/java

Из man страниц:

--exclude pattern

    Do not process files or directories that match the specified pattern.  
    Note that exclusions take precedence over patterns or filenames 
    specified on the command line.
1

Обратите внимание, что если вам нужно позаботиться об относительных путях.

Поэтому вам нужно использовать ./fileToExclude в файле Exclude не полное имя файла.

1

Tar имеет возможность исключать файлы по шаблону имени. Попробуйте это вместо этого.

Если вы хотите использовать исключающий файл, то убедитесь, что пути (то есть те, которые выводит tar и те, что в файле) точно такие же. Так что, хотя «a //b» совпадает с «a /b» в командной строке, для tar оно отличается.

1

Если вы действительно хотите использовать опцию -X, попробуйте это:

tar -cvf java.tar -X Exclude $HOME/java

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .