Bash: For loops inside for loops



我无法使这个简单的脚本在bash 中工作

# Works
for f in *; do
for j in $f/Attachments/*.pdf; do 
echo "$j"
done;
done
# Doesn't work  
for f in *; do
for j in $f/Attachments/*.pdf; do 
if [ ! pdfinfo "$j" &> /dev/null ]; then
echo "$j"
fi
done;
done

我已经阅读了10多本指南,我不明白为什么这个脚本会列出一堆随机目录。

它应该:

  1. 列出当前目录中的文件夹
  2. 在每个文件夹中,它应该在子目录Attachments中列出所有PDF文件
  3. 对于每个文件,它应该检查它是否已损坏,如果已损坏,则打印它

您想要的可以通过以下代码片段实现:

for f in */Attachments/*.pdf; do
if ! pdfinfo "$f" &>/dev/null; then
echo "$f"
fi
done

在代码中,for f in *遍历所有文件(包括目录(。如果只需要目录,则必须使用了for f in */。比如:

for d in */; do
for f in "$d"Attachments/*.pdf; do
[[ -f $f ]] || continue
if ! pdfinfo "$f" &>/dev/null; then
echo "$f"
fi
done
done

最新更新