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

#csh

#csh

Вопрос:

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

Ответ №1:

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

 #!/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 "%sn" 
end

exit 0 
  

Есть настройка dir где искать и ваш массив types . Каждый цикл проходит через каталог / тип и находит файлы с суффиксом типа с помощью регулярного выражения. 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