我是bash的新手,我正在尝试查看我的目录是否包含其对应的txt文件的文件夹。并非所有文件夹都有相应的txt文件,并且该目录有很多文件夹和txt文件,所以我想让它自动化。
示例目录:
a_1/
a_1.txt
b_1/
b_1.txt
c_1/
c_1.txt
d_1/
我理解如何分别检查目录中是否存在文件或文件夹。但是我无法检查文件夹中是否存在相应的txt文件。
我想要打印文件夹存在的东西,但文件不存在。
从上面的示例中,它将打印具有相应文件夹的文件:folder a_1/ and a_1.txt both exist
并且没有相应的txt文件:d_1/ exist but txt file doesn't.
这是我目前所拥有的,但它似乎没有起作用。 :(
#!/bin/bash
for x in *; do
if [[ -d "$DIRECTORY" ]] && [[ -f ${f%.txt} ]]; then
echo -n "$x ${x%%.dir}.txt are both present ";
else
echo "directory '$DIRECTORY' existed but didn't find txt file"
答案 0 :(得分:1)
根据您的规范,更正了脚本:
#!/bin/bash
for x in *; do
if [[ -d "$x" ]]; then
if [[ -f $x.txt ]]; then
echo "$x and $x.txt are both present "
else
echo "Directory '$x' exists but $x.txt doesn't"
fi
fi
done
答案 1 :(得分:0)
只是对上述回复发表评论,双[[and]]没有必要。此外,您可以使用句点表示当前工作目录(顺便说一下,bash技巧也适用于命令行):
for x in .; do
if [ -d ${x} ]; then
...
fi
done
您还可以从命令行指定路径:
./ myprog.sh / Volumes / myflashdrive / filedir
path=${1}
for x in ${path}; do
if [ -d ${x} ]; then
...
fi
done