Просматривать подпапки с помощью сценария bash

Я нашел решение! во-первых:

$ sudo nano /etc/environment

Во-вторых (добавьте эту строку в конфигурацию):

_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=setting'

Но я чего-то не понял. Согласно эта статья параметр не является значением. Также вышеописанный ранее параметр вообще не указан, и эта проблема присутствовала.

1
30.06.2017, 17:35
3 ответа

В bash (не простой sh) вы можете использовать шаблон**/подстановочных знаковдля рекурсивного обхода каталогов. Сначала вам нужно установить параметр globstar. Например, для запуска mycommandдля каждого файла .fastqв папке /project/samples:

#!/bin/bash
shopt -s globstar
for x in /project/samples/**/*.fastq; do
  mycommand "$x"
done

Это доступно только начиная с bash 4.0 (поэтому не на bash по умолчанию в OSX, но эта функция также доступна в zsh). Помните, что в версиях bash до 4.3 он также проходит по символическим ссылкам на каталоги.

Если вам нужно запустить одну команду для всех файлов, вы можете:

mycommand /project/samples/**/*.fastq

Однако вы можете столкнуться с ограничением длины командной строки. Это помогает использовать относительный путь:

cd /project/samples
mycommand **/*.fastq

Если это все еще не подходит, вам нужно найти другое решение, чтобы делать все, что вам нужно, которое не включает передачу всех имен файлов в качестве аргументов этой команде. сразу.

2
28.04.2021, 23:59
#!/bin/bash

if [ ! -d "$1" ]; then
    printf 'Not a directory: %s\n' "$1" >&2
    exit 1
fi

find "$1" -type f -name "*.fastq" -print

Это небольшой скрипт, который просто перечисляет файлы fastq в заданном каталоге.

Если вы хотите выполнить команду для каждого файла, самым простым способом было бы изменить findна

find "$1" -type f -name "*.fastq" -exec utility {} ';'

Где utility— это некоторая программа, которая использует путь fastq в командной строке ({}будет заменено на путь к файлу fastq).

1
28.04.2021, 23:59

С помощьюнайдитекоманду:

find /project/samples/ -name "*.fastq"
5
28.04.2021, 23:59

Теги

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