Список содержания файла tar или каталога только вниз к некоторому уровню

Интересно, как перечислить содержание файла tar только вниз к некоторому уровню?

Я понимаю tar tvf mytar.tar перечислит все файлы, но иногда я хотел бы только видеть каталоги вниз к некоторому уровню.

Точно так же для команды ls, как я управляю уровнем подкаталогов, которые будут отображены? По умолчанию это только покажет прямые подкаталоги, но не пойдет далее.

52
задан ire_and_curses 23 April 2010 в 06:56
поделиться

3 ответа

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 скрипту и получить тот же эффект.

32
ответ дан 7 November 2019 в 08:59
поделиться

Было бы неплохо, если бы мы могли указать команде find заглядывать внутрь tar-файла, но я сомневаюсь, что это возможно.

Я бы быстро и некрасиво (и небезопасно) ограничил количество разделителей каталогов, например:

 $ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'

2 указывает отображать не более двух косых черт (в моем случае один уже сгенерирован разделителем пользователя / группы), и, следовательно, для отображения файлов на глубине не более единицы. Вы можете попробовать использовать другие числа вместо 2.

6
ответ дан 7 November 2019 в 08:59
поделиться

Я согласен с ответом leonbloy - в самом архиве нет способа сделать это напрямую.

Что касается второй части вашего вопроса, ls не имеет опции максимальной глубины. Вы можете рекурсировать все с помощью ls -R , но это часто не очень полезно.

Однако вы можете сделать это как с find , так и с tree . Например, чтобы перечислить файлы и каталоги на один уровень глубже, вы можете сделать

find -maxdepth 2

или

tree -L 2

tree также имеет параметр -d , который рекурсивно перечисляет каталоги, но не файлы, которые я нахожу гораздо полезнее, чем -L в целом.

5
ответ дан 7 November 2019 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: