2016-12-27 10 views
2

У меня есть папка с файлами размером 4000 * .txt и * .txt.bak.Найти файл с точным расширением (и ничего не найдено) с помощью regex

Я хочу запустить linux find-command, чтобы найти все * .txt файлы, но не файлы * .txt.bak. Каким будет правильное регулярное выражение?

например.

find . -regex ".*txt" 

найдет все файлы, включая файлы BAK

find . -regex ".*txt$/" 

не найдет файлы на всех

+1

Уверены ли вы в этом? Я просто попытался найти. -regex ". * txt" 'и он не нашел мои файлы' .txt.bak' – Dekel

+2

Зачем использовать '-regex' вообще? 'найти. -name '* .txt'' не найдет '.txt.bak' и полностью совместим с POSIX. –

+0

Вы правы, я переусердствовал, нашел. -name '* .txt' работает по назначению. – octavio

ответ

2

Это очень просто вам не нужно регулярное выражение в находке. Просто используйте find $pwd -name "*.txt" Это будет автоматически соответствовать вашему требованию. Чтобы упростить и предоставить более подробную информацию для извлечения только имени файла и расширения, вы можете использовать что-то вроде этого.

for i in $(find $pwd -name "*.txt") 
do 
    flnm=$(basename $i) 
    extnm="${flnm##*.}" 
    flnmnoext="${flnm%.*}" 
    echo "FileName is : " $flnm " Extension is : " $extnm " File Name without extension is $flnmnoext" 
done 

Это объяснено несколькими темами. Надеюсь, поможет.