BASH检查文本文档中是否存在文件名
我试图找出如何检查.txt文档中是否存在文件名 我有文件list.txt,其中包含: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
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中。谢谢!如果你能提交更清晰的版本,我会非常感激。这是我正在做的一个练习,只要我能理解它,它就不必是超级高效的。谢谢!如果你能提交更清晰的版本,我会非常感激。这是我正在做的一个练习,它不必如此超级高效,只要我能理解。