find 명령의 변수는 bash의 새 변수로 설정됩니다.

find 명령의 변수는 bash의 새 변수로 설정됩니다.

다음과 같이 할 수 있습니까?

inputNum="$1"

files=($(find /dir/to/check -mtime $inputNum))

기본적으로 아이디어는 입력 매개변수를 사용하여 파일을 찾는 일수를 설정하고 이를 변수 배열로 설정할 수 있다는 것입니다. Bash에서 읽을 수 있는 구문이 확실하지 않습니다.

답변1

대신 사용하지 않는 한 의 출력은 find안정적으로 사후 처리될 수 없습니다 ( 작업이 지정되지 않은 경우 암시됨).-print0-print-print

출력을 사후 처리 find -print0하고 파일 경로를 배열에 저장하려면 다음을 수행하십시오.

Bash4.4+의 경우:

readarray -td '' files < <(find /dir/to/check -mtime "$inputNum" -print0)

이전 버전의 경우:

files=()
while IFS= read -rd '' file; do
  files=("${files[@]}" "$file")
done < <(find /dir/to/check -mtime "$inputNum" -print0)

보다 일반적으로 다음 조언을 읽어야 합니다.찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?

답변2

당신이 사용할 수 있다면다루기 힘든bash 대신 훨씬 쉽습니다. Zsh는 속성을 기반으로 파일을 일치시킬 수 있습니다.글로벌 예선.

files=(/dir/to/check/**/*(Dm$inputNum))

**/*하위 디렉터리를 재귀적으로 검색합니다. 다음 대괄호에는 *glob 한정자가 포함되어 있습니다. D점 파일을 포함하고 m수정 시간(일)을 기준으로 파일과 일치합니다 find -mtime(다른 단위를 선택하고 시간을 제한할 수도 있습니다(예: (Dmm-$min)이와 같이 find -mmin -$min)).

Zsh는 macOS에 사전 설치되어 제공됩니다. 대부분의 다른 UNIX 시스템(특히 대부분의 Linux 배포판)에서는 패키지로 제공되지만 기본적으로 설치되지는 않습니다.

관련 정보