繁体   English   中英

从文本文件读取目录时发生更改

[英]Directory changes when being read from text file

我有一个文本文件done.txt,其中包含我需要处理的文件路径。 这是我的done.txt的第一部分:

/data/voice/Voice27Folds/1000/1017_009.flac
/data/voice/Voice27Folds/1000/1017_010.flac
/data/voice/Voice27Folds/1000/1017_013.flac
/data/voice/Voice27Folds/1000/1017_014.flac
/data/voice/Voice27Folds/1000/1017_015.flac
/data/voice/Voice27Folds/1000/1017_020.flac
/data/voice/Voice27Folds/1000/1017_025.flac
/data/voice/Voice27Folds/1000/1017_026.flac
/data/voice/Voice27Folds/1000/1017_027.flac
/data/voice/Voice27Folds/1000/1017_030.flac

.....

当我运行此命令时:

while IFS= read -r var
do
echo "$var" 
done < /data/voice/done.txt

我完全在done.txt中得到了东西:

/data/voice/Voice27Folds/1000/1017_009.flac
/data/voice/Voice27Folds/1000/1017_010.flac
/data/voice/Voice27Folds/1000/1017_013.flac
/data/voice/Voice27Folds/1000/1017_014.flac
/data/voice/Voice27Folds/1000/1017_015.flac
/data/voice/Voice27Folds/1000/1017_020.flac
/data/voice/Voice27Folds/1000/1017_025.flac
/data/voice/Voice27Folds/1000/1017_026.flac
/data/voice/Voice27Folds/1000/1017_027.flac
/data/voice/Voice27Folds/1000/1017_030.flac

....

但是,当我尝试:

while IFS= read -r var
do
mv "$var" /data/voice #move all files to this directory
done < /data/voice/done.txt

我收到大量与目录相关的错误,例如:

mv: cannot stat '/data/voice/Voice27Folds/1000/1017_009.flac\r': No such file and directory
mv: cannot stat '/data/voice/Voice27Folds/1000/1017_013.flac\r': No such file and directory

...

我注意到正确的目录可能已更改,并在末尾附加了“ \\ r”。 我该如何解决?

$'\\r'是回车符-将光标发送回行首的指令。

在DOS(和Windows)上,文本文件的每行以$'\\r\\n' (CRLF)结尾,而在UNIX上,每行仅以$'\\n'结尾。 因此,在UNIX上读取DOS文本文件时,每行似乎都有一个额外的$'\\r'

因为当echo打印该字符时,它将光标移动到行的开头,而不是创建任何可见的输出,所以回车echo "$var"不能区分尾随回车的情况(除非您在它后面打印了任何东西- echo "[$var]"会将]放在行的开头而不是结尾)。 如果要以清晰的外观显示隐藏字符的方式打印变量内容,请使用printf 'var=%q\\n' "$var"代替。

while IFS= read -r var; do
  var=${var%$'\r'}         # remove any trailing carriage return from var
  mv -- "$var" /data/voice #move all files to this directory
done < /data/voice/done.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM