我有一个场景将从文本文件创建一个新目录。
新目录.txt
/test/test1
/test/test1/test2
我使用了这段代码,但我倾向于得到双 test1 子文件夹
while IFS="" read -r p || [ -n "$p" ]
do
mkdir -p "$p" &&
chmod -R 770 "$p"
done < newDirectory.txt
假设测试主文件夹已经创建。我有 2 个 test1 文件夹。一个有额外的“^M”(/test/test1^M),但没有子文件夹,一个有预期的文件夹,里面有子文件夹(/test/test1/test2)
删除创建的文件夹时也应引用该文本文件
while IFS="" read -r p || [ -n "$p" ]
do
rm -rf $p
done < newDirectory.txt
但只有 /test/test1/test2 被删除,/test/test1 仍然存在。谢谢
答案1
您已经被告知您的文本文件可能包含 DOS 行结尾 (CR+LF),因此在 UNIX 世界中它看起来像
/test/test1^M
/test/test1/test2^M
^M
根据您使用的编辑器,回车符不可见。
那么会发生什么呢?对于第一行,^M
创建带有尾随回车符的文件夹,而第二行则由于该选项而创建test1
不带尾随回车符的文件夹。^M
-p
然后在删除时,该test1^M
文件夹以及子文件夹都会被删除test1/test2^M
,但没有人请求删除自动创建的文件夹test1
。
解决方案:删除错误的行结尾。如果您dos2unix
手头没有,请使用
sed -i.bak 's/^M$//' newDirectory.txt
(插入^M
by 键入,ctrlV然后键入ctrlM)。
顺便说一句,使用时,不要忘记在行中bash
引用。"$p"
rm