在命令替换中查找: while 内结果为空,结果在命令行中

在命令替换中查找: while 内结果为空,结果在命令行中

我有这个 bash 脚本来查找由 PhotoRec 恢复的文件(我知道文件在那里,但由于它们的数量,我无法一一找到它们),但是如果我运行一个, find 命令不会返回任何结果脚本行之一(除了 while 循环)每一个都有效......除了 find 。我正在使用 SystemRescueCd,所以我改变了桀骜巴什,但即便如此,奇怪的行为也没有改变。

这是 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变量在尽管循环到IFS=$'\n'并与-打印-打印0参数寻找(甚至放弃两者),结果总是相同的......

所以。为什么相同的命令替换会有不同的行为? bash 脚本中缺少什么?

答案1

源文件photorec-未创建的文件.txt有这样的所有行:

无法创建文件 /media/samsung/recup_dir.1/inode_733583/R Jota - Pantomima-kCcgjM55IqA.mp4:

开头是“Can't create ilfe”,结尾是冒号。 (通常我都会使用 ViM 删除它们,但似乎我已经忘记这样做了)

这很糟糕,因为$行是使用的变量$未创建的文件获取完整路径的基本名称,该路径不返回任何内容,然后将其用作 param -name 的值寻找命令,显然也没有返回任何内容,这就是为什么寻找bash 脚本中永远不会返回任何结果。

相关内容