Получить путь к файлу относительно

У меня есть два каталога A и B. Каждый из них содержит почтовый индекс.

Как записать путь этих двух zip-файлов в текстовый файл?

Пример для системы каталогов:

FILES/ONE/one.zip
FILES/TWO/two.zip

И я хочу запустить команду из каталога ФАЙЛЫ

4
задан 10 January 2018 в 17:32

3 ответа

Вы можете использовать команду 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
8
ответ дан 10 January 2018 в 17:32

Этого можно достичь с помощью простой оболочки. Например, учитывая

$ 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, чтобы правильно обработать случай, когда не существует соответствующего файла.

2
ответ дан 10 January 2018 в 17:32

Или вы можете сделать это с помощью 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
0
ответ дан 10 January 2018 в 17:32
  • 1
    Для меня компьютер, который становится недостижимым, подключен через кабель LAN. – Ashfame 20 June 2012 в 11:02
  • 2
    Для меня компьютер, который становится недостижимым, подключен через кабель LAN. – Ashfame 20 June 2012 в 11:02

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

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