Перечисление содержимого файла TAR или каталога только до некоторого уровня
Вопрос
Интересно, как перечислить содержимое файла TAR только до некоторого уровня?
я понимаю tar tvf mytar.tar
Перечислите все файлы, но иногда я хотел бы видеть только каталоги на некотором уровне.
Точно так же для команды ls
, Как мне контролировать уровень подкаталогов, которые будут отображаться? По умолчанию он покажет только прямые подкаталоги, но не идут дальше.
Решение
tar tvf scripts.tar | awk -F/ '{if (NF<4) print }'
drwx------ glens/glens 0 2010-03-17 10:44 scripts/
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl
-rwxr--r-- glens/www-data 359 2009-08-14 00:01 scripts/pastebin.sh
-rwxr--r-- glens/www-data 566 2009-07-27 10:42 scripts/critic.pl
-rwxr-xr-x glens/glens 981 2009-12-16 09:39 scripts/wiki_sys.pl
-rwxr-xr-x glens/glens 3072 2009-07-28 10:25 scripts/blacklist_update.pl
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl
Обязательно отметим, что номер 3+, однако многие уровни, которые вы хотите, из-за / в имени пользователя / группы. Если вы просто делаете
tar tf scripts.tar | awk -F/ '{if (NF<3) print }'
scripts/
scripts/my2cnf.pl
scripts/pastebin.sh
scripts/critic.pl
scripts/wiki_sys.pl
scripts/blacklist_update.pl
scripts/sysinfo.pl
Это всего два больше.
Возможно, вы могли бы вывести вывод ls -R
к этому awk
Сценарий и имеют тот же эффект.
Другие советы
глубина = 1.
tar --exclude="*/*" -tf file.tar
Глубина = 2.
tar --exclude="*/*/*" -tf file.tar
Было бы здорово, если бы мы могли сказать find
Команда, чтобы заглянуть в файл TAR, но я сомневаюсь, что это возможно.
Я быстрый и уродливый (и не надежный) способ ограничить количество сепараторов каталога, например:
$ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'
То 2 Сообщает отобразить не более 2 хулиганств (в моем случае он уже генерируется сепаратором пользователя / группы), и, следовательно, для отображения файлов на глубине не более одного. Возможно, вы захотите попробовать с разными номерами на месте 2.
Другой вариант есть архимерный. Отказ Вы устанавливаете его и компакт-диск в него. Тогда вы можете сделать все с ним так же, как и с другой файловой системой.
$ archivemount /path/to/files.tgz /path/to/mnt/folder
Кажется быстрее, чем метод смолы.
я согласен с Ответ Леонблоя - Нет никакого способа сделать это прямо в самом тарболе.
Что касается второй части вашего вопроса, ls
не имеет максимальной опции глубины. Вы можете резють все с участием ls -R
, но это часто не очень полезно.
Однако вы можете сделать это с обоими find
а также tree
. Отказ Например, чтобы список файлов и каталогов на один уровень глубоко, вы можете сделать
find -maxdepth 2
или
tree -L 2
tree
также имеет А. -d
вариант, который рекурсивно перечисляет каталоги, но не файлы, которые я нахожу гораздо более полезным, чем -L
, В основном.