명령줄 인수로서의 디렉토리

명령줄 인수로서의 디렉토리

아래 코드에서 크기가 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

관련 정보