答案1
表示$'\r'
行rgb_train_ids.txt
具有 DOS 样式的行尾,由 2 个字符序列 CRLF 组成。Linux 要求文件仅使用 LF。您可以使用实用程序转换文件,或者使用或dos2unix
删除 CR 字符。tr
sed
另外,使用循环遍历行for file in $(cat rgb_train_ids.txt)
是一种不好的做法 - 如果行中包含空格或其他 shell 特殊字符,它将失败。您应该考虑使用循环while
:
while IFS= read -r file; do
mv "$file.png" Train/
done < <(tr -d '\r' < rgb_train_ids.txt)
尾随的/
onTrain/
是一种安全措施,如果目录不存在,它将导致mv
命令出错- 而不是无意中重命名每个文件。或者,您可以使用来明确说明Train
mv -t Train "$file.png"
Train
是目标目录。
也可以看看
您还可以考虑使用xargs
而不是 shell 循环:
tr -d '\r' < rgb_train_ids.txt | xargs -d '\n' mv -t Train