首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文件读取时目录发生变化

从文本文件读取时目录发生变化
EN

Stack Overflow用户
提问于 2017-03-08 23:54:21
回答 1查看 30关注 0票数 0

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

代码语言:javascript
复制
/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

.....

当我运行此命令时:

代码语言:javascript
复制
while IFS= read -r var
do
echo "$var" 
done < /data/voice/done.txt

我在done.txt中得到了确切的东西:

代码语言:javascript
复制
/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

....

然而,当我尝试的时候:

代码语言:javascript
复制
while IFS= read -r var
do
mv "$var" /data/voice #move all files to this directory
done < /data/voice/done.txt

我收到了大量与目录相关的错误,比如下面这个:

代码语言:javascript
复制
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“。我怎么才能修复它呢?

EN

回答 1

Stack Overflow用户

发布于 2017-03-08 23:58:20

$'\r'是一个回车符--这是一条将光标返回到行首的指令。

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

因为当echo打印该字符时,它会将光标移动到行首,而不是创建任何类型的可视输出,因此无法使用echo "$var"区分是否存在尾随回车符的情况(除非您在后面打印了任何内容-- echo "[$var]"会将]放在行首而不是行尾)。如果您希望以直观明确的方式打印变量内容以显示隐藏字符,请改用printf 'var=%q\n' "$var"

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42675954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档