我有一个名为" my_text_file.txt"的文本文件。我有另一个名为" dir"。
的目录现在," my_text_file.txt"有几行,每行都有一个文件名。我想只得到" my_text_file.txt"文件名也存在于目录" dir"。
中我试过像
这样的东西ls dir -1 | grep my_text_file.txt
但似乎不起作用。任何帮助表示赞赏。
答案 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)
您没有说明您使用的是哪种外壳。如果您有bash
或zsh
,则可以使用
comm -12 <(ls dir) <(sort my_text_file.txt)
这是否适用于其他贝壳,我也不知道。