我有以下文件“nbr_chk.txt”,此文件包含可以在任何目录中的数字(从1到10)。它们所在的子目录是第5和第6个数字
nbr_chk.txt
612345678
623456789
634567890
我想使用该文件创建脚本并执行以下操作:
for i in 'cat nbr_chk.txt'
do
ls -lrtd /*/d5d6/i to find the directory
if there is more than one directory print the directories
if there is only 1 directory use it and find if there is a file that contains the word " test" and print number xxxxxxxxx
done
编辑1:
例如,编号612345678可以位于以下目录/ 05/45 / 612345678中 但也可以在目录/ 09/45 / 612345678中。
出于这个原因,我需要做一个ls -lrtd / * / ....来查找目录。
如果有多个目录我需要创建错误消息
d5表示数字的第5位和d6表示第6位数字。 如果数字是612300012,数字5 = 0,数字6 = 0,我将不得不使用 ls -lrtd / * / 00/612300012
如果用的是Unix以外的其他语言,我会知道怎么做,但在这里我迷路了。
感谢
答案 0 :(得分:0)
规范不太清楚,但我会做一些猜测并提出这个:
#!/bin/bash
for i in $(cat nbr_chk.txt)
do
dirName=d${i:4:1}d${i:5:1}
grep -q " test" "$dirName"/* && echo "$i"
done
这不能解决你所有的问题,因为有些问题仍然不清楚(至少对我来说)。请详细说明未达到的细节,以便我们将它们纳入解决方案。
答案 1 :(得分:0)
我想你可能正在寻找这样的东西:
#!/bin/bash
for i in $(cat nbr_chk.txt)
do
dir=d${i:4:1}d${i:5:1}
echo Checking $dir...
dirlist=$(find . -type d -name "$dir")
ndirs=$(find . -type d -name "$dir" | wc -l)
if [ $ndirs -gt 1 ]; then
echo $dirlist
fi
if [ $ndirs -eq 1 ]; then
cd $dirlist
grep -q " test" * 2> /dev/null && echo $i
fi
done