디렉토리 목록을 find 명령으로 구문 분석할 수 있습니까?

디렉토리 목록을 find 명령으로 구문 분석할 수 있습니까?

${file}*.zip다음 명령을 사용하여 특정 디렉터리에 있는 패턴이 있는 파일의 압축을 반복적으로 풀고 싶다고 가정해 보겠습니다./home/A/XMLfind

find /home/A/XML -type f -name "${file}*.zip" -exec unzip '{}' -d /target/path \;

이제 분석하고 싶습니다.디렉토리 목록그냥보다는/home/A/XML

for dir in "${path}"; do        

    find "${dir}" -name "${file}*\.zip" -type f -exec unzip '{}' -d "${dir}"/"${file}" \;

done

루프를 사용하여 디렉토리를 구문 분석했지만 for첫 번째 디렉토리 이후에 압축 해제가 중지됩니다. 즉, 이전 코드와 동일한 작업을 수행하고 디렉토리에서만 압축이 해제됩니다 /home/A/XML.

caution:  not extracting; -d ignored

나머지 디렉토리에서는 위의 오류가 발생합니다. 누구든지 나를 안내할 수 있나요? 미리 감사드립니다.

답변1

해당 디렉토리 목록이 줄 바꿈(한 줄에 하나씩)으로 구분된 스칼라 변수에 저장되어 있는 경우 $path(여러 셸에서 특별하기 때문에 좋은 변수 이름은 아니지만 그렇지 않음 bash) 다음을 수행할 수 있습니다.

IFS=$'\n' # split on newline
set -o noglob # disable glob

for dir in $path # invoke the split+glob operator ($path unquoted)
do
  find "$dir" -name "$file*.zip" -type f -exec unzip -d "$dir/$file" {} \;
done

대신에 배열 $path이라면 루프 를 다음으로 변경하십시오.bashpath=(dir1 dir2...)

for dir in "${path[@]}"

GNU를 사용하는 경우 모든 파일을 동일한 디렉터리에 병합하지 않으려면 디렉터리당 하나만 성공하도록 허용하기 위해 끝에 조건자나 명령을 추가 find해야 할 수도 있습니다 .-quitfindunzipzip

옵션은 옵션이 아닌 인수 앞에 배치되어야 합니다.

관련 정보