У меня есть два каталога A и B. Каждый из них содержит zip.
Как я могу записать путь этих двух zip-файлов в текстовый файл?
Пример для системы каталогов:
FILES/ONE/one.zip
FILES/TWO/two.zip
И я хочу запустите команду из каталога FILES
Вы можете использовать команду 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
Вы можете использовать команду 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
Вы можете использовать команду 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
Вы можете использовать команду 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
Вы можете использовать команду 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 shell, например
$ 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
Или вы можете сделать это с помощью 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
Простая оболочка оболочки может достичь этого. Например, с учетом
$ 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 shell, например
$ 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
Простая оболочка оболочки может достичь этого. Например, с учетом
$ 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 shell, например
$ 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
Простая оболочка оболочки может достичь этого. Например, с учетом
$ 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 shell, например
$ 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
Простая оболочка оболочки может достичь этого. Например, с учетом
$ 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 shell, например
$ cd ..
$ shopt -s globstar
$ printf '%s\n' **/*.zip
FILES/ONE/one.zip
FILES/TWO/two.zip
. Если вы используете это в скрипте, вероятно, вам следует включить параметр nullglob, чтобы правильно обрабатывать случай, в котором нет совпадений файл существует.