Как получить имя папок в каталоге с Bash

Обратите внимание, что руководство, которому вы следовали, было обновлено:

https://wiki.alpinelinux.org/wiki/Install_Alpine_on_VMware

, поскольку дискеты больше не поддерживаются.

0
19.10.2020, 14:54
1 ответ

cat — это программа, которая просто берет входной поток или файл и выводит его на стандартный вывод. Вы не можете catкаталог, это не имеет смысла. Если вы просто хотите увидеть имена всех подкаталогов первого уровня данного каталога, вы можете использовать echo, который просто печатает то, что вы ему даете:

$ for dir in foo/*/; do echo "$dir"; done
foo/dir1/
foo/dir2/
foo/dir3/
foo/dir4/

Вам даже не нужна петля:

$ echo foo/*/
foo/dir1/ foo/dir2/ foo/dir3/ foo/dir4 

Чтобы получить только имена каталогов, без пути:

$ for dir in foo/*/; do basename "$dir"; done
dir1
dir2
dir3
dir4

Кроме того, вы можете cdперейти по пути:

$ cd foo
$ echo */
dir1/ dir2/ dir3/ dir4/

Или cdв подоболочке, чтобы вы оставались там, где были изначально, когда команда завершается:

$ ( cd foo && echo */ )
dir1/ dir2/ dir3/ dir4/

Или, чтобы получить их на отдельных строках, а также гарантировать, что это будет работать даже для странных имен каталогов (, например. имя, содержащее новую строку):

    $ ( cd foo && printf -- '%s\n' */ ) 
    dir1/
    dir2/
    dir3/
    dir4/
    

Наконец, если имена ваших каталогов могут содержать новые строки или другие странности, используйте:

6
18.03.2021, 22:56

Теги

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