テキストファイルから新しいディレクトリを作成するシナリオがあります。
新しいディレクトリ.txt
/test/test1
/test/test1/test2
このコードを使用しましたが、test1サブフォルダが2つある傾向があります。
while IFS="" read -r p || [ -n "$p" ]
do
mkdir -p "$p" &&
chmod -R 770 "$p"
done < newDirectory.txt
テストホームフォルダがすでに作成されているとします。 test1フォルダが2つあります。 1 つに追加の「^M」(/test/test1^M) がありますが、サブフォルダーはなく、1 つには内部にサブフォルダーがある予想フォルダー (/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
を含むフォルダが作成され、2行目はオプションのため、後続のキャリッジリターンがないtest1
フォルダが作成されます。^M
-p
その後、削除するとそのtest1^M
フォルダとサブフォルダも削除されますが、test1/test2^M
自動的に作成されたフォルダに対しては誰も削除を要求しませんでしたtest1
。
解決策:間違った行末を削除してください。dos2unix
お持ちでない場合はご利用ください。
sed -i.bak 's/^M$//' newDirectory.txt
(^M
種類別に入力してからctrlV入力してくださいctrlM)。
ちなみに、使用時に行の中に引用することを忘れないでくださいbash
。"$p"
rm