現在の作業ディレクトリのサフィックスを含むすべてのファイルを指定.sh
されたディレクトリに移動する簡単なスクリプトを作成しました。
これらのファイルがない場合、スクリプトはシステムエラーメッセージではなく、私が入力したエラーメッセージのみを出力する必要があります。mv: cannot stat ‘*.sh’: No such file or directory
./shm 2> /dev/null
putコマンドの後に追加しようとしたので、mv
スクリプトは無限に実行されました!
システムエラーメッセージを無音にする方法は?
#!/bin/bash
echo "Moving all script files to script directory..."
mv *.sh $HOME/linux/scripts
#./shm 2> /dev/null
if [ $? -ne 0 ]
then
echo "No files with .sh suffix"
fi
答え1
私はこれがエラーメッセージを取り除く誤った方法だと思います。私のような場合は、確認に使用する方が良いです。
#!/bin/bash
if ls *.sh &> /dev/null
then
echo "Moving all script files to script directory..."
mv -v -n *.sh $HOME/linux/scripts
else
echo "No files with .sh suffix -- nothing to move"
fi
答え2
以下のスクリプトは、カスタムエラーメッセージを表示するのに役立ちます。
#!/bin/bash
files=$(ls *.sh 2> /dev/null)
if [ -z "$files" ]
then
echo "No script files found. Exiting.."
exit
fi
echo "Moving all script files to script directory..."
for file in $files
do
if ! mv $file $HOME/linux/scripts
then
echo "Unable to move file $file"
fi
done
"*.sh"
スクリプトが実行されると、スクリプトの現在の作業ディレクトリにあるファイルのリストが変数にfiles
割り当てられます。
$files
次に、変数が空であることを確認するために、完全性チェックを実行します。空の場合、"*.sh"
ディレクトリにファイルがないことを意味します。
ファイルが存在する場合、for
ループは$files
変数を繰り返して各ファイルを移動します。コマンドが失敗すると、mv
エラーが印刷されます。
for
ループの詳細については、次を参照してください。このファイル。
答え3
2>/dev/null
mvコマンドを追加してstderrを/ dev / nullにリダイレクトします。
mv *.sh $HOME/linux/scripts 2>/dev/null
答え4
CostasまたはKannanに関する他の解決策:
if ! mv $file $HOME/linux/scripts
と交換する必要があります
if ! mv "$file" "$HOME/linux/scripts/."
また、スクリプトの先頭にこの行を追加してください。
mkdir -p "$HOME/linux/scripts"
それ以外の場合、linux / scriptsが見つからない場合は、各ファイルが1つに移動され、古いファイルが上書きされます。
ファイルまたはフォルダ名にスペースが含まれている場合は、引用符が必要です。