BASH检查文本文档中是否存在文件名

BASH检查文本文档中是否存在文件名,bash,Bash,我试图找出如何检查.txt文档中是否存在文件名 我有文件list.txt,其中包含: 001 jane jane_profile_07272018.doc 002 kwood kwood_profile_04022017.doc 003 pchow pchow_profile_05152019.doc 004 janez janez_profile_11042019.doc 005 jane jane_pic_07282018.jpg 006 kwood kwood_pic_04032017.j

我试图找出如何检查.txt文档中是否存在文件名

我有文件list.txt,其中包含:

001 jane jane_profile_07272018.doc
002 kwood kwood_profile_04022017.doc
003 pchow pchow_profile_05152019.doc
004 janez janez_profile_11042019.doc
005 jane jane_pic_07282018.jpg
006 kwood kwood_pic_04032017.jpg
007 pchow pchow_pic_05162019.jpg
008 jane jane_contact_07292018.csv
009 kwood kwood_contact_04042017.csv
010 pchow pchow_contact_05172019.csv
我需要检查文件系统中是否存在与“jane”相关的文件

在试图找出它的时候,我只想通过搜索.doc来检查是否可以使它工作,但我无法找出要使用的if表达式

files=$(grep "jane " list.txt | cut -d " " -f3)

if [ -e *.doc "$files" ]; then
  echo "File exists"
  fi
这会给出错误:“main.sh:第5行:[:jane_profile_07272018.doc:应为二进制运算符”

我花了很多令人尴尬的时间试图弄明白这一点,所以非常感谢任何帮助

编辑:在一位朋友的帮助下,我们找到了答案,这段代码最适合我正在尝试的工作

#!/bin/bash

> oldFiles.txt

files=$(grep " jane " list.txt | cut -d' ' -f3)

for f in $files; do 
  if [ -e $f ]; then
    echo $f >> oldFiles.txt;
  fi
done
#!/bin/bash

> oldFiles.txt

files=$(grep " jane " list.txt | cut -d' ' -f3)

for f in $files; do 
  if [ -e $f ]; then
    echo $f >> oldFiles.txt;
  fi
done

这可能有助于使用
bash
和正则表达式:

while read -r x y z; do [[ "$z" =~ jane.*\.doc$ ]] && [[ -e "$z" ]] && echo "$z exists"; done < list.txt

这可能有助于使用
bash
和正则表达式:

while read -r x y z; do [[ "$z" =~ jane.*\.doc$ ]] && [[ -e "$z" ]] && echo "$z exists"; done < list.txt
这里有三个函数,首先定义。实际首先运行的前两个命令位于底部;首先使用sed和cut生成堆栈,然后调用下一个函数

下一个函数使用wc查看堆栈文件中的行号是否大于零。如果大于零,则调用main。如果不大于零,则调用end

如果调用main,则将文件中的第一行指定给line变量,然后测试该文件名是否存在,如果存在,则进行回显。然后sed删除文件中的顶行(这将文件的行数减少1),然后脚本再次运行下一个函数

当堆栈文件的行长度达到零时,调用end,删除空堆栈文件,并以零错误代码退出,表示成功

这里有三个函数,首先定义。实际首先运行的前两个命令位于底部;首先使用sed和cut生成堆栈,然后调用下一个函数

下一个函数使用wc查看堆栈文件中的行号是否大于零。如果大于零,则调用main。如果不大于零,则调用end

如果调用main,则将文件中的第一行指定给line变量,然后测试该文件名是否存在,如果存在,则进行回显。然后sed删除文件中的顶行(这将文件的行数减少1),然后脚本再次运行下一个函数


当堆栈文件的行长度达到零时,调用end,删除空堆栈文件,并以零错误代码退出,表示成功。

在朋友的帮助下,我们找到了答案,这段代码适用于我正在尝试的操作

#!/bin/bash

> oldFiles.txt

files=$(grep " jane " list.txt | cut -d' ' -f3)

for f in $files; do 
  if [ -e $f ]; then
    echo $f >> oldFiles.txt;
  fi
done
#!/bin/bash

> oldFiles.txt

files=$(grep " jane " list.txt | cut -d' ' -f3)

for f in $files; do 
  if [ -e $f ]; then
    echo $f >> oldFiles.txt;
  fi
done

在朋友的帮助下,我们找到了答案,这段代码适用于我正在尝试做的事情

#!/bin/bash

> oldFiles.txt

files=$(grep " jane " list.txt | cut -d' ' -f3)

for f in $files; do 
  if [ -e $f ]; then
    echo $f >> oldFiles.txt;
  fi
done
#!/bin/bash

> oldFiles.txt

files=$(grep " jane " list.txt | cut -d' ' -f3)

for f in $files; do 
  if [ -e $f ]; then
    echo $f >> oldFiles.txt;
  fi
done

谢谢!它可以工作,但我不完全理解它,所以很遗憾我无法修改它来解决我的问题。我需要能够检查我是否有任何/所有文件(一个.doc和一个.csv)存在于list.txt中。谢谢!它可以工作,但我不完全理解它,因此很遗憾,我无法修改它以解决我的问题。我需要能够检查我是否有任何/所有文件(一个.doc和一个.csv)存在于list.txt中。谢谢!如果你能提交更清晰的版本,我会非常感激。这是我正在做的一个练习,只要我能理解它,它就不必是超级高效的。谢谢!如果你能提交更清晰的版本,我会非常感激。这是我正在做的一个练习,它不必如此超级高效,只要我能理解。