
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
cd /home/Sud/Minimal\ Packages/All/
if [ -d $line ]
then
cp $line*.rpm /home/Sud/NewFolder/rpms/
else
echo $line>>/home/Sud/NewFolder/notfound.txt
fi
done < "$1"
上記のコードを実行しようとしています。
- テキストファイルを1行ずつ読み込む
- 同じ名前のディレクトリが存在する場合は、そのフォルダを検索してください。
- ㅏ)その場合は、そのディレクトリの内容を別のディレクトリにコピーします。
- 雨)そうでない場合は、ディレクトリ名を別のテキストファイルにコピーしてください。
スクリプトを実行するたびに、notfound.txt
検索中のフォルダに名前があってもすべての名前がコピーされます。
私はどこで間違っていますか?
答え1
スペースを正しく処理するために、すべての目的を$line
二重引用符で囲むことはできますか?
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
cd /home/Sud/Minimal\ Packages/All/
if [ -d "$line" ]
then
cp "$line*.rpm" /home/Sud/NewFolder/rpms/
else
echo "$line" >> /home/Sud/NewFolder/notfound.txt
fi
done < "$1"
答え2
if cp "$line"*.rpm destination/ ; then
echo $line "successful!"
else
echo $line "not found!"
echo "$line">> /home/Sud/notfound.txt
fi
これは私にとって効果的です。