PhotoRec에서 복구된 파일을 찾기 위한 이 bash 스크립트가 있습니다(파일이 있다는 것을 알고 있지만 번호 때문에 하나씩 찾을 수 없습니다). 그러나 스크립트 줄 중 하나를 실행하면 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 스크립트에서는 결과가 반환되지 않습니다.