Перечисление содержимого файла TAR или каталога только до некоторого уровня

StackOverflow https://stackoverflow.com/questions/2700306

  •  01-10-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top