从文本文件创建文件夹和子文件夹

从文本文件创建文件夹和子文件夹

我有一个场景将从文本文件创建一个新目录。

新目录.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

(插入^Mby 键入,ctrlV然后键入ctrlM)。

顺便说一句,使用时,不要忘记在行中bash引用。"$p"rm

相关内容