以下のコードでサイズ0のファイルを検索し、必要に応じてユーザーにファイルを削除するように求めます。ただし、スクリプトがディレクトリをコマンドライン引数として指定できるようにする必要があるため、迷子になりました。コマンドラインにディレクトリが指定されていない場合は、現在のディレクトリをデフォルトのディレクトリとして使用する必要があります。私は正しい道を行っていると思いますが、ユーザーに削除したいファイルのパスを尋ねるメッセージを表示する方法を理解できないようです。
#!/bin/bash
ls -lR | grep '^-' | sort -k 5 -rn
echo "Files of size zero, relative to current directory, are as follows:"
find . -size 0 -print
echo "Would you like to delete the files of size zero?: Type yes or no"
read answer
if [[ $answer == "yes" ]]
then
find . -type f -empty -delete
echo "List of files with size zero files deleted:"
ls -lR | grep '^-' | sort -k 5 -rn
else
echo "User wishes to not delete files"
fi
答え1
あなたは使うでしょう
topdir=${1:-.}
topdir
変数が欠落しているか空でない限り、最初のコマンドライン引数に設定され、この場合はコマンドで使用.
できます。"$topdir"
二重引用符を使用することを忘れないでください。
削除するファイルのパスをユーザーに尋ねるプロンプトは表示されませんfind
。すでにそのパスを使用しています。
find "$topdir" -type f -empty -delete
各ファイルのヒントが本当に必要な場合は使用できます
find "$topdir" -type f -empty -ok rm {} ';'
スタイルの説明:
通常、標準エラーが発生すると、ユーザーにプロンプトが出力されます。
echo "Would you like to delete the files of size zero?: Type yes or no" >&2 read answer
または
read -p "Delete files (yes/no): " answer
両方の通貨で
-size 0
ワを混ぜます。-empty
find