PhotoRecで修復されたファイルを見つけるためのこのbashスクリプトがあります(ファイルがあることを知っていますが、番号のために1つずつ見つかりません)。ただし、スクリプト行のいずれかを実行すると、findコマンドは結果を返しません(whileループを除く)、検索を除いてすべてが機能します。 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 ファイルを生成できません:
「ilfeを作成できません」で始まり、コロンで終わります。 (通常ViMを使って削除しますが、削除するのを忘れてしまったようです)
これは悪いから$行使用される変数です$生成されていないファイル何も返さないフルパスのデフォルト名を取得し、それをparam -nameの値として使用します。探すコマンドも何も返さないようです。探すBashスクリプトでは結果は返されません。