BASH-检查文件是否存在,如果存在,则将文件名附加到.txt

BASH-检查文件是否存在,如果存在,则将文件名附加到.txt,bash,Bash,我正在尝试创建一个bash脚本,它首先查找一个名称,然后检查文件系统中是否存在某个文件名,例如vacation021.jpg,如果它存在,我想将该文件名附加到一个.txt文件中 我对此有很多问题,我对bash还是很陌生 这就是我所能做到的 > oldFiles.txt files=$(grep "jane " list.txt) for i in $files; do if test -e vacation021.jpg; then echo $i >> old

我正在尝试创建一个bash脚本,它首先查找一个名称,然后检查文件系统中是否存在某个文件名,例如vacation021.jpg,如果它存在,我想将该文件名附加到一个.txt文件中

我对此有很多问题,我对bash还是很陌生

这就是我所能做到的

> oldFiles.txt

files=$(grep "jane " list.txt)

for i in $files; do
  if test -e vacation021.jpg;
    then echo $i >> oldFiles.txt; fi
done
但是,这会将list.txt中的所有单独单词追加到oldFiles.txt


任何帮助都将不胜感激。

for i in$files
将迭代
$files
中的每个单词,而不是行。如果要迭代行,请将
grep
的输出通过管道传送到循环:

grep 'jane ' list.txt | while read -r i; do
    if test -e vacation021.jpg
    then printf "%s" "%i"
    fi
done > oldFiles.txt
但正如评论中所提到的,除非在循环过程中创建或删除
vacation021.jpg
文件,否则只要使用一个
,如果

if test -e vacation021.jpg
then
    grep 'jane ' list.txt > oldFiles.txt
fi

这有点令人困惑-list.txt文件中会有什么内容?您的
test
总是检查同一个文件,它不应该更改每次迭代吗?将
grep“jane”list.txt
的输出添加到您的问题中。当循环运行时,什么进程可能突然删除
vacation021.jpg
?在循环之前测试
vacation021.jpg
是否存在,如果不存在则中止,这难道还不够吗?
files
将包含带空格的文件名,因为tghe
grep
命令中的
jane
后面有空格。因此,您的
for
循环将不起作用,因为它会将文件名中的每个单词视为一个单独的项。