2017-01-23 52 views
1
匹配的文件以及目录

我需要存储在shell脚本匹配单个变量的文件和目录名如何存储和删除UNIX

log_dir=`echo $line | awk -F "$delimiter" '{print $1}'` 
pattern=`echo $line | awk -F "$delimiter" '{print $2}'` 
days=`echo $line | awk -F "$delimiter" '{print $3}'` 
flag=`echo $line | awk -F "$delimiter" '{print $4}'` 
now=$(date +%s) 

matching_files=`find $log_dir/$pattern` 
for f in $matching_files ; do 
//code 
done 

但我得到下面的错误我

find: `magsubmit_*': No such file or directory 
matching_files= 

上市后我需要删除两个匹配的文件和目录以及我可以使用单个命令吗?而不是rmf和rm -rf?

如何实现这个?

+0

'$ line'中有什么?你能举一个例子吗? – hansaplast

+1

另外:请在示例中删除行'days = ...','flag = ...'和'now = ...',因为它们不需要解释问题 – hansaplast

+1

在我看来,最新的方式处理这些事情通常是用'find'$ log_dir /“$ pattern -exec bash script.sh {} +'替换你的'matching_files = $(找到”$ log_dir /“$ pattern” .sh'是一个shell脚本,可能是为了这个单一命令的目的而创建的,它包含了$ for_files中for $的代码。做...完成“命令,处理它所给出的参数(所以'对于$ @”'中的f)。该机制处理文件名中的奇怪字符(空格,换行符等)。并非所有人都同意这一点;通常似乎需要用一条线来完成。 –

回答

1

如果你想一个一个地处理您的文件和目录,你可以在击4.0+做到这一点:

shopt -s globstar nullglob 

pattern="your_pattern_goes_here" 
for f in $log_dir/**/$pattern; do 
    # matching files 
done 

for d in $log_dir/**/$pattern/; do 
    # matching directories 
done 

我宁愿乔纳森的方法,因为它是更有效的。