特定のディレクトリが存在することを確認し、存在しない場合はそれを生成するスクリプトを作成しました。その後、forループを使用して、現在のディレクトリにある非表示のすべての一般的なファイルを繰り返します。ファイルが空の場合、ユーザーにファイルを移動するかどうかを尋ねるメッセージが表示されます。私が経験している問題は、スクリプトがファイルの実行を完了した後にすべてのファイルが空であることを確認し、メッセージを表示する必要があることです。これが私が持っているものです。
#!/bin/bash
if [ -d Empty_Files ]
then
echo "This file directory exists already. Move on"
else
mkdir Empty_Files
echo "I created the Empty_Files directory since it didn't exist before"
fi
for file in `ls`
do
if [ ! -s $file ]
then
echo "Would you like" $file "moved to Empty_Files? It's empty! Enter Yes or No"
read userinput
if [ $userinput = "Yes" ]
then
mv $file ./Empty_Files
fi
if [ $userinput = "No" ]
then
echo "Ok, I will not move it!"
fi
fi
done
if [ -s $file ]
then
echo "There are no empty files!"
exit 55
fi
ご覧のとおり、私がif
最後に言った言葉は望む効果を得ませんでした。
答え1
コマンドの置き換えに逆引用符(囲み)を使用しないでください
ls
。読みやすく、問題があります。他のコマンドの出力を使用する必要がある場合は、$(command args1 args2)
代わりにフォームを使用してください。lsを解析しないでください。代わりにシェルワイルドカードを使用してください。
for file in *
すべての変数を引用:
if [ ! -s "$file" ]
exit 55
非常に一般的なタイプのエラーではありません。通常人々はexit 1
。コードをインデントすることで、各部分が何をするか、各ifステートメントが開始/終了する位置、各ループが開始および終了する場所を明確に知ることができます。
これは固定スクリプトです
#!/bin/bash
if [ -d Empty_Files ]
then
echo "This file directory exists already. Move on"
else
mkdir Empty_Files
echo "I created the Empty_Files directory since it didn't exist before"
fi
count=0
for file in *
do
if [ ! -s "$file" ]
then
count=$(( $count+1 ))
echo "Would you like" $file "moved to Empty_Files? It's empty! Enter Yes or No"
read userinput
if [ "$userinput" = "Yes" ]
then
mv "$file" ./Empty_Files
fi
if [ "$userinput" = "No" ]
then
echo "Ok, I will not move it!"
fi
fi
done
# quoting here not necessary because it's integer
if [ $count -eq 0 ];
then
echo "There are no empty files!"
exit 1
fi
テストの実行
[2821][TESTDIR][11:14]:
$ tree
.
├── Empty_Files
└── move_empty.sh
1 directory, 1 file
[2821][TESTDIR][11:14]:
$ ./move_empty.sh
This file directory exists already. Move on
There are no empty files!
[2821][TESTDIR][11:14]:
$ touch empty1 empty2
[2821][TESTDIR][11:14]:
$ ./move_empty.sh
This file directory exists already. Move on
Would you like empty1 moved to Empty_Files? It's empty! Enter Yes or No
Yes
Would you like empty2 moved to Empty_Files? It's empty! Enter Yes or No
No
Ok, I will not move it!
[2821][TESTDIR][11:14]:
$ tree
.
├── empty2
├── Empty_Files
│ └── empty1
└── move_empty.sh
1 directory, 3 files