如果文本文件尚不存在,我需要pdftotext子目录中的所有文件。我试过了:
find . -name "*.pdf" | while read file; if [ ! -e $file.txt ] do pdftotext $file; done;
但是接收:-bash:意外令牌“完成”附近的语法错误
答案 0 :(得分:3)
我建议:
find . -name "*.pdf" | while IFS= read -r file; do if [ ! -e "$file.txt" ]; then pdftotext "$file"; fi; done
请参阅:help while
和help if
答案 1 :(得分:0)
不要将数据传输到shell;在 find
内执行的shell循环。
script='
for f in "$@"; do
if ! [ -e "$f" ]; then
pdftotext "$f"
fi
done
'
find . -name '*.pdf' -exec sh -c "$script" _ {} +
这适用于任何有效文件名,即使是包含换行符的文件名。 find
每次调用时都会向脚本传递尽可能多的文件,并根据需要多次调用脚本来处理所有文件。