Поиск большого количества расширений с помощью find

Несколько моментов, которые нужно проверить дважды:
1) Вы можете подключиться локально
2) Вы можете ftp 127.0.0.1 с терминала
3 ) Вы настроили переадресацию портов в своем маршрутизаторе для диапазона портов
4) Вы изменили порт прослушивания по умолчанию на вашем ftp-сервере, чтобы зеркалировать один из портов в диапазоне, установленном в вашем маршрутизаторе.



По моему опыту, когда у меня возникают проблемы с FTP, они возникают из-за одной из вышеперечисленных, обычно четвертой!

4
29.03.2017, 01:59
2 ответа

Предполагая, что у вас есть GNU find или FreeBSD / macOS find, вы можете построить большое регулярное выражение, которое соответствует всем шаблонам, и перечислить файлы с помощью -regex . Помните, что создание регулярного выражения непросто: вам нужно позаботиться о специальных символах в расширениях. Ваш текущий код уже не делает ничего разумного, если расширение имени файла содержит новую строку. С инструментами GNU вы можете сделать (непроверено)

new_extensions=$(find / -regextype posix-extended -name '*.*' -type f ! -regex "$old_regex" -print0 |
                 sed -z 's/.*\.//; s/[][\\$^.()|*+?]/\\&/g' |
                 sort -zu | tr '\0' '|')
if [ "$new_extensions" = "|" ]; then
  echo "No new extensions"
else
  new_regex="\\.(${new_extensions%?})\$"
fi

. Я думаю, вам будет лучше со сценарием perl / python / ruby. Вы можете начать с find2perl или использовать Python os.walk .

0
27.01.2020, 21:01

Вы можете использовать опцию grep -f, которая позволяет искать список шаблонов, хранящихся в файле:

# find "$dir" -type f | grep -f ext_patterns.txt

Вот файл ext_patterns.txt должен содержать расширения в виде регулярных выражений, например:

\.html$
\.java$
\.jpg$

Вы можете создать этот файл так же, как вы создаете свой базовый план. Вот команда, использующая awk:

find -type f -name "*.*" \
| awk -F. '{ print "\\." $NF "$" }' \
| sort -u \
> ext_patterns.txt

Здесь найти имена выходных файлов с расширением; awk печатает расширение вместе с начальной (экранированной) точкой и конечным $ (код регулярного выражения означает «конец строки»); а sort -u делает каждый шаблон уникальным.

1
27.01.2020, 21:01

Теги

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