bash-скрипт для создания текстового файла со всеми файлами с определенным окончанием

Просто командой sed:

pip list | sed '1,2d'

Пояснение :Команда sedудаляет(d)строки в диапазоне от 1 до 2 (и выводит все остальное ).

Илиawk:

pip list | awk 'NR > 2'

Пояснение :Программа awkвыводит все, начиная с строки 3.

awkбыло бы особенно полезно, если вы планируете выполнять дальнейший анализ этого вывода, например, извлекать только имена пакетов:

pip list | awk 'NR > 2 { print $1 }'

Команда cut, которую вы упомянули в вопросе (, несмотря на то, что используемая семантика неверна ), не обрезает строк . Да, это так, но он обрезает поля из строк.

1
30.04.2020, 20:11
1 ответ

Если вы хотите использовать parallelи выполнить команду для всех файлов, оканчивающихся на .SAFE, все, что вам нужно, это:

parallel -j4 <some_program> ::: *.SAFE

Или, если ваши имена файлов могут содержать \n, используйте-0:

parallel -j4 -0 <some_program> ::: *.SAFE

Сохранение имен файлов в файле редко является хорошим подходом. Во-первых, это сломается, если имена файлов могут содержать\n(символы новой строки ), если вы не разделяете файл нулевым -. Вместо этого вы обычно хотите использовать глобус. Тем не менее, есть несколько способов получить имена файлов в файл:

  1. Просто, но не работает с новыми строками в именах файлов:

    printf '%s\n' *.SAFE > filenames.txt
    
  2. Более сложный, но может работать с произвольными именами файлов:

    find. -type f -name '*.SAFE' -print0 > filenames
    

    Это создает файл, разделенный NULL -, поэтому вам нужен инструмент, который может обрабатывать такой ввод. parallelможно сделать это с помощью-0:

    parallel -0 -j4 <some_program> :::: filenames
    

Таким образом, при таком подходе ваш сценарий может быть:

#!/bin/sh
find. -type f -name '*.SAFE' -print0 > filenames
parallel -0 -j4 <some_program> :::: filenames

Но если ваши имена файлов не содержат пробелов, новых строк или каких-либо других странностей, просто запустите parallel -j4 -0 <some_program> ::: *.SAFEи покончим с этим.

4
28.04.2021, 23:17

Теги

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