Как использовать регулярные выражения для сопоставления списка местоположений файлов? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь создать скрипт, который будет определять расположение и типы файлов на основе их пути к файлу. Например, если у меня есть местоположение /home/file/txt/test.txt и /home/file/tcl/test.tcl. Я хочу сделать переменные, которые для третьего / местоположение. Так что в этом примере это будут txt и tcl. Поэтому у меня будет список мест, которые следуют этому формату. Я хочу сделать foreach через список, а затем установить переменную в третий / местоположение. Затем я напечатаю эту переменную. Что будет правильным регулярным выражением для этого?

1 Ответ

0 голосов
/ 09 апреля 2019

Ваша задача довольно расплывчата.Это всегда хорошо размещать желаемые входы и выходы.В любом случае, здесь есть какой-то запуск для Вашей задачи, если я хорошо понял Вашу спецификацию:

#!/bin/env csh
set dir='./file/'
set types=('tcl' 'txt')
foreach type (${types})
  #HERE replace with Your commands
  #example find with regex
  echo " ... searching for *.${type} in ${dir}${type}/"
  find "${dir}${type}/" -type f -regex '.*\.'"${type}"'$' -print0 | xargs -0 printf "%s\n" 
end

exit 0 

Есть настройка dir, где найти и массив Ваших types.Цикл foreach проходит через dir / type и находит файлы с суффиксом типа, используя regexp.xargs здесь необязателен, и я специально его разместил, чтобы показать, как правильно обрабатывать файлы.Вы можете заменить, например, на:

xargs -0 -I {} cp {} /home/newdestination/

Если вам нужно скопировать, например, в новое место назначения.

Тест:

% ./list_file.csh
 ... searching for *.tcl in ./file/tcl/
./file/tcl/a.tcl
./file/tcl/b.tcl
 ... searching for *.txt in ./file/txt/
./file/txt/a.txt
./file/txt/b.txt
...