두 개의 매개변수를 사용하는 스크립트를 만들어야 합니다 bash
. 하나는 파일 이름을 검색할 문자열이고 다음은 검색할 파일 경로입니다. 다음으로 일치하는 파일을 한 번에 하나씩 반복하여 인쇄한 다음 사용자에게 삭제할지 묻는 메시지를 표시해야 합니다.
예는 다음과 같습니다:
./scriptName.sh foo /path/to/directory/
/path/to/directory/foo.txt
Delete this? (y/n)
user input
/path/to/directory/foop.txt
Delete this? (y/n)
user input
etc...
나는 처음에 시도했다
find $2 -type f -name "*$1*" -print
그리고
find $2 -type f -name "*$1*" -delete
여기서 는 $1
스크립트의 첫 번째 매개변수이고 는 두 번째 매개변수입니다.$2
이것은 발견된 각 파일을 개별적으로 나열하고 삭제하라는 메시지를 표시해야 한다는 것을 깨달을 때까지 작동했습니다. 이는 코드의 처음 두 줄이 일치하는 모든 파일을 한 번에 삭제했기 때문에 문제였습니다.
답변1
to를 사용하여 찾은 경로 이름을 -ok
실행 하거나 toexecute를 사용할 수 있습니다 .rm
-exec
rm -i
이는 각각의 간단한 예를 보여주며 $searchpath
검색 경로는 다음 $pattern
과 같다고 가정합니다.결정적인이름 패턴(예 "*$1*"
: ).
-ok
: 을 사용하면 비슷한 -ok
작업을 수행 하지만 지정된 유틸리티를 실행하기 전에 먼저 사용자 확인을 요청합니다. 이를 사용하여 발견된 각 경로 이름을 개별적으로 실행합니다.find
-exec
rm
find "$searchpath" -type f -name "$pattern" -ok rm {} \;
사용 rm -i
: rm
파일을 삭제하기 전에 유틸리티 자체에서 확인을 요청합니다. 대량 경로 이름에 이것을 사용할 수 있습니다.
find "$searchpath" -type f -name "$pattern" -exec rm -i {} +
물론 자신만의 프롬프트를 구현할 수도 있습니다. 다음은 bash
단일 파일 삭제를 요청하는 스크립트 입니다 "$pathname"
.
read -p "Delete the file at $pathname? y/[n]: "
[[ "$REPLY" == [yY]* ]] && rm "$pathname"
find
대량 경로 이름에 대해 이 메소드를 호출하십시오.
find "$searchpath" -type f -name "$pattern" -exec bash -c '
for pathname do
read -p "Delete the file at $pathname? y/[n]: "
[[ "$REPLY" == [yY]* ]] && rm "$pathname"
done' bash {} +
사용자가 대문자 또는 소문자로 시작하는 문자열로 응답하면 y
파일이 삭제됩니다.
관련된:
답변2
pattern=$1
dir=$2
for file in $(find ${dir} -type f -name "*${pattern}*")
do
/bin/rm -i ${file}
done
기본적으로 명령에 의해 반환된 파일을 반복하고 find
있으며 rm -i
명령은 y/n
파일을 삭제할지 여부를 묻습니다. 이것이 당신이 찾고 있는 것이라고 생각합니다. 그러나 그렇지 않다면, 추가 도움이 필요한 것이 무엇인지 사람들에게 알려주십시오.