如何仅打印存在相同文件名的文件夹名称

时间:2019-05-16 17:40:26

标签: linux shell scripting

我正在尝试编写一个脚本,其中所有匹配的文件名都存在。 例如,我在/ 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

这给了我所有输出,但是我只需要文件夹名。 任何帮助将不胜感激!!

2 个答案:

答案 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

第一个循环迭代文件名

第二个循环在路径中搜索文件名并从中删除文件名