我必须只在文本文件中获取包含另一个目录中文件的文件名的那些行

时间:2016-08-14 11:48:59

标签: linux shell unix grep ls

我有一个名为" my_text_file.txt"的文本文件。我有另一个名为" dir"。

的目录

现在," my_text_file.txt"有几行,每行都有一个文件名。我想只得到" my_text_file.txt"文件名也存在于目录" dir"。

我试过像

这样的东西
ls dir -1 | grep my_text_file.txt

但似乎不起作用。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

你可以使用while while循环:

while IFS= read -r line; do
    f="dir/$line"
    [[ -f $f ]] && printf "%s\n" "$f"
done < my_text_file.txt

或者您可以使用xargs:

xargs -0 ls -ld 2>/dev/null < <(awk -v ORS='\0' '{print ".foo/"$0}' my_text_file.txt)

答案 1 :(得分:1)

您需要将oh传递给grep:

$ ls
1.txt  2.txt  3.txt  files.txt

$ cat files.txt
1.txt
2.txt
3.txt
hello.txt

$ for n in *; do grep -oh $n files.txt; done
1.txt
2.txt
3.txt

答案 2 :(得分:1)

$ ls -1 tmp
abc def
bar
foo

$ cat file
stuff
abc def
bar
nonsense
foo

$ xargs -d'\n' -I {} -n 1 < file ls tmp/{} 2>/dev/null
tmp/abc def
tmp/bar
tmp/foo

答案 3 :(得分:1)

您没有说明您使用的是哪种外壳。如果您有bashzsh,则可以使用

comm -12 <(ls dir) <(sort my_text_file.txt)

这是否适用于其他贝壳,我也不知道。