Интересно, как перечислить содержание файла 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
скрипту и получить тот же эффект.
Было бы неплохо, если бы мы могли указать команде find
заглядывать внутрь tar-файла, но я сомневаюсь, что это возможно.
Я бы быстро и некрасиво (и небезопасно) ограничил количество разделителей каталогов, например:
$ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'
2 указывает отображать не более двух косых черт (в моем случае один уже сгенерирован разделителем пользователя / группы), и, следовательно, для отображения файлов на глубине не более единицы. Вы можете попробовать использовать другие числа вместо 2.
Я согласен с ответом leonbloy - в самом архиве нет способа сделать это напрямую.
Что касается второй части вашего вопроса, ls
не имеет опции максимальной глубины. Вы можете рекурсировать все с помощью ls -R
, но это часто не очень полезно.
Однако вы можете сделать это как с find
, так и с tree
. Например, чтобы перечислить файлы и каталоги на один уровень глубже, вы можете сделать
find -maxdepth 2
или
tree -L 2
tree
также имеет параметр -d
, который рекурсивно перечисляет каталоги, но не файлы, которые я нахожу гораздо полезнее, чем -L
в целом.