我正在尝试编写一个脚本,其中所有匹配的文件名都存在。 例如,我在/ opt下的许多子文件夹中都有一个文件TEST123。我有一个文件名列表。因此,我只需要打印具有相同文件名的文件夹名称。
所需的输出:
TEST123
/opt/test2
/opt/test3
我不确定如何使用grep命令: 我有一个列表“ elements.txt”,其中包含文件名的完整路径。我只将文件名的末尾切成“ onlyfile.txt”。
这是elements.txt具有许多不同文件名的外观,其中有些已经重复而有些没有。
/opt/test2/TEST123
/opt/test3/TEST123
/opt/test2/TEST577
/opt/test6/SUNNY
/opt/test8/SUNNY
这仅是file.txt:
TEST123
TEST577
SUNNY
and many more files
并且需要使用
这样的文件名循环for item in `cat onlyfile.txt`
do
grep elements.txt
done
这给了我所有输出,但是我只需要文件夹名。 任何帮助将不胜感激!!
答案 0 :(得分:1)
要获取每个名为TEST123
的文件的目录,请使用find
命令:
find /opt -name TEST123 -printf "%h\n"
输出将是:
/opt/test2
/opt/test3
%h
说明符将输出文件的目录。有关更多信息,请参见find
manpage。
答案 1 :(得分:1)
在这种情况下,我认为您需要多个循环。
for item in `cat onlyfile.txt`; do
for path in `cat elements.txt |grep $item`; do
dirname $path
done
done
第一个循环迭代文件名
第二个循环在路径中搜索文件名并从中删除文件名