У меня есть два каталога A и B. Каждый из них содержит почтовый индекс.
Как записать путь этих двух zip-файлов в текстовый файл?
Пример для системы каталогов:
FILES/ONE/one.zip
FILES/TWO/two.zip
И я хочу запустить команду из каталога ФАЙЛЫ
Вы можете использовать команду find
с выводом в файл следующим образом:
/tmp/FILES$ find . -name "*.zip" -print > outfile.txt
Найти каждый файл, заканчивающийся zip
, внутри текущей папки (FILES
) и распечатайте его путь
Вывод команды find
направляется в текстовый файл:
Содержимое outfile.txt
:
/tmp/FILES$ cat outfile.txt
./TWO/two.zip
./ONE/one.zip
Обратите внимание, что если вы выполните команду
find
в одной папке над папкойFILES
, ваш вывод будет включать также частьFILES
этой папки.
, например. когда результат поиска направляется на stdout
/tmp$ find FILES -name "*.zip" -print
FILES/TWO/two.zip
FILES/ONE/one.zip
Этого можно достичь с помощью простой оболочки. Например, учитывая
$ tree .
.
├── ONE
│ └── one.zip
└── TWO
└── two.zip
2 directories, 2 files
, затем
$ printf '%s\n' */*.zip
ONE/one.zip
TWO/two.zip
Перенаправить вывод в файл, добавив > outfile
к команде. Если вы хотите добавить ./
, чтобы сделать относительный путь более явным, измените %s
на ./%s
$ printf './%s\n' */*.zip > outfile
$ cat outfile
./ONE/one.zip
./TWO/two.zip
. Если вы хотите сделать это рекурсивно , то bash
поддерживает это, если вы включили опцию оболочки globstar
, например
$ cd ..
$ shopt -s globstar
$ printf '%s\n' **/*.zip
FILES/ONE/one.zip
FILES/TWO/two.zip
Если вы используете это в сценарии, вам, вероятно, следует также включить опцию nullglob
, чтобы правильно обработать случай, когда не существует соответствующего файла.
Или вы можете сделать это с помощью regex
find /tmp/FILES -regextype posix-egrep -regex ".*/*/*.zip" > outfile.txt
Вывод такой же:
./TWO/two.zip
./ONE/one.zip
Проблема в том, что он будет соответствовать всем zip-файлам в любой подпапке. Если вы можете определить подпапки, содержащие файлы, вы можете сделать:
find /tmp/FILES -regextype posix-egrep -regex ".*/(ONE|TWO)/*.zip" > outfile.txt