我有这个 bash 脚本来查找由 PhotoRec 恢复的文件(我知道的文件在那里,但由于它们的编号我无法一个一个地找到它们),但是如果我逐个运行 find 命令不会返回任何结果一个脚本行,(while 循环除外)每一个都有效......除了查找。我正在使用 SystemRescueCd,所以我将zsh更改为bash,但即使如此,奇怪的行为也没有改变。
这是 bash 脚本无法正常工作:
#!/bin/bash
findpath="/media/samsung/recup_dir.2/"
echo "FIND PATH: $findpath"
fileslistfile="/media/windows2/photorec-created-files.txt"
rm -rf "$fileslistfile"
touch "$fileslistfile"
echo "FILES LIST FILE: $fileslistfile"
echo "* * * * *"
while IFS= read -r line; do
echo "LINE: $line"
#echo "$line" >> "$fileslistfile"
uncreatedfile=$(basename "$line")
echo "UNCREATED FILE: $uncreatedfile"
# this command doesn't return any result
createdfile=$(find "$findpath" -name "$uncreatedfile" -print)
echo "CREATED FILE: $createdfile"
if [ "$createdfile" != "" ]; then
echo "$createdfile" >> "$fileslistfile"
else
echo "$line" >> "$fileslistfile"
fi
done < "/root/photorec-uncreated-files.txt"
exit 1
这是在 CLI 中执行的命令序列,可以正常工作:
findpath="/media/samsung/recup_dir.1/";
echo "FIND PATH: $findpath";
line="/media/samsung/recup_dir.1/inode_733583/R Jota - Pantomima-kCcgjM55IqA.mp4";
echo "LINE: $line";
uncreatedfile=$(basename "$line");
echo "UNCREATED FILE: $uncreatedfile";
# this command returns a result
createdfile=$(find "$findpath" -name "$uncreatedfile" -print);
echo "CREATED FILE: $createdfile";
if [ "$createdfile" = "" ];
then echo "FILE UNCREATED $line";
else echo "FILE CREATED $createdfile";
fi;
我在IFS=$'\n'的while循环中使用IFS变量,并在find中使用-print和-print0参数(甚至删除两者),结果总是一样的......
所以。为什么相同的命令替换行为不同?bash 脚本中缺少什么?
源文件photorec-uncreated-files.txt包含如下所有行:
开头是“Can't create ilfe”,结尾是冒号。(通常我都使用 ViM 删除它们,但似乎我一直忘记这样做)
这很糟糕,因为$line是$uncreatedfile用来获取完整路径的基本名称的变量,它不返回任何内容,然后用作 find 命令的 param -name 的值,显然也没有返回任何内容,这就是为什么find从不在 bash 脚本中返回任何结果。