как перечислить файлы в папке с помощью сценариев bash

Я только начинаю с bash-скриптов, и я пытался написать простой скрипт, где я могу перечислить все файлы с определенным расширением, используя скрипт bash. Я в основном код в Python или Matlab, поэтому я очень привык устанавливать адрес папки и использовать функцию cd для изменения пути к этой папке и получения списка файлов в этой папке. Я пытался сделать это с помощью bash, и я не то, что делаю неправильно. Например, я пытаюсь перечислить все вложенные папки в папку со следующим адресом "/home/user012/Desktop/folder2Start"

До сих пор я пытался

cd "/home/user012/Desktop/folder2Start"

, и он не сделал много когда я запускаю его из терминала.

Как бы я записал его и перечислил его папки?

Любая помощь будет принята с благодарностью ..

0
задан 6 August 2017 в 07:28

5 ответов

Это типичный прецедент для globing оболочки (расширение пути):

/home/user012/Desktop/folder2Start/*/

Здесь я использовал */, который будет соответствовать любому файлу (*) под /home/user012/Desktop/folder2Start/, что это каталог (trailing /).

Если вы хотите работать с ними позже, лучше поместите результат расширения в массив (работает аналогично Python list, оба равны 0 -indexed):

directories=( /home/user012/Desktop/folder2Start/*/ )

, тогда вы можете ссылаться на массив и его элементы, используя обычные операторы манипуляции массивами.

OTOH, если вы хотите использовать этот список, используйте echo / printf / ls - все, что вам подходит:

printf '%s\n' /home/user012/Desktop/folder2Start/*/ echo /home/user012/Desktop/folder2Start/*/ ls -ld /home/user012/Desktop/folder2Start/*/

для любого имени каталога со встроенной новой строкой, ищет хвост / как маркер окончания имени.

0
ответ дан 18 July 2018 в 08:59

Вы должны использовать что-то вроде:

ls -l -d /home/user012/Desktop/folder2Start/*/ */ ищет каталоги -d, которые не печатают содержимое этих каталогов.
0
ответ дан 18 July 2018 в 08:59

Это типичный прецедент для globing оболочки (расширение пути):

/home/user012/Desktop/folder2Start/*/

Здесь я использовал */, который будет соответствовать любому файлу (*) под /home/user012/Desktop/folder2Start/, что это каталог (trailing /).

Если вы хотите работать с ними позже, лучше поместите результат расширения в массив (работает аналогично Python list, оба равны 0 -indexed):

directories=( /home/user012/Desktop/folder2Start/*/ )

, тогда вы можете ссылаться на массив и его элементы, используя обычные операторы манипуляции массивами.

OTOH, если вы хотите использовать этот список, используйте echo / printf / ls - все, что вам подходит:

printf '%s\n' /home/user012/Desktop/folder2Start/*/ echo /home/user012/Desktop/folder2Start/*/ ls -ld /home/user012/Desktop/folder2Start/*/

для любого имени каталога со встроенной новой строкой, ищет хвост / как маркер окончания имени.

0
ответ дан 24 July 2018 в 19:13
  • 1
    Большое спасибо за ответ. Я пытаюсь сделать что-то в соответствии с использованием каталогов = (/ home / user012 / Desktop / folder2Start / * /) Однако, когда я использую этот способ, я получаю следующую ошибку bash: /testBash.sh: Нет такого файла или Я хочу сохранить папки, а затем посмотреть, есть ли у них какие-либо подпапки, которые могут иметь файлы моего интереса – sanster9292 6 August 2017 в 07:59

U может перечислить этот файл «folder2Start», выпустив:

ls -la /home/user012/Desktop/folder2Start

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

0
ответ дан 24 July 2018 в 19:13

Вы должны использовать что-то вроде:

ls -l -d /home/user012/Desktop/folder2Start/*/ */ ищет каталоги -d, которые не печатают содержимое этих каталогов.
0
ответ дан 24 July 2018 в 19:13

Другие вопросы по тегам:

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