${file}*.zip
다음 명령을 사용하여 특정 디렉터리에 있는 패턴이 있는 파일의 압축을 반복적으로 풀고 싶다고 가정해 보겠습니다./home/A/XML
find
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
이라면 루프 를 다음으로 변경하십시오.bash
path=(dir1 dir2...)
for dir in "${path[@]}"
GNU를 사용하는 경우 모든 파일을 동일한 디렉터리에 병합하지 않으려면 디렉터리당 하나만 성공하도록 허용하기 위해 끝에 조건자나 명령을 추가 find
해야 할 수도 있습니다 .-quit
find
unzip
zip
옵션은 옵션이 아닌 인수 앞에 배치되어야 합니다.