首页 > 解决方案 > 如何使用正则表达式匹配文件位置列表?

问题描述

我正在尝试制作一个脚本,该脚本将根据文件路径识别文件位置和类型。例如,如果我有一个位置 /home/file/txt/test.txt 和 /home/file/tcl/test.tcl 。我想为第三个 / 位置创建变量。所以在示例情况下,这将是 txt 和 tcl。所以我会有一个遵循这种格式的位置列表。我想通过列表进行 foreach,然后将变量设置为第三个 / 位置。然后我将打印该变量。什么是正确的正则表达式?

标签: csh

解决方案


你的任务很模糊。发布所需的输入和输出总是好的。无论如何,如果我很好地理解了您的规范,这是您的任务的一些启动:

#!/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查找位置和 Your 的数组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

推荐阅读