텍스트 파일에서 새 디렉터리를 만드는 시나리오가 있습니다.
새 디렉터리.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
테스트 홈 폴더가 이미 생성된 것으로 가정합니다. test1 폴더가 2개 있습니다. 하나에는 추가 "^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
종류별로 입력한 ctrlV후 를 입력하세요 ctrlM).
참고로, 사용할 때 줄 안에 인용하는 것을 잊지 마세요 bash
."$p"
rm