コマンドライン引数としてのディレクトリ

コマンドライン引数としてのディレクトリ

以下のコードでサイズ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ワを混ぜます。-emptyfind

関連情報