디렉터리 및 하위 디렉터리에서 일치하는 파일 찾기

디렉터리 및 하위 디렉터리에서 일치하는 파일 찾기

Percona XtraBackup을 사용하여 압축된 백업을 생성했지만 이제 파일의 압축을 풀어야 합니다. 지침에 따르면 다음을 실행해야 합니다.

for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

하지만 모든 곳을 검색하고 찾은 파일의 압축을 풀 것 같습니다. 특정 디렉터리와 하위 디렉터리에만 파일의 압축을 풀기를 원합니다.

나는 실행하려고 :

for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

하지만 이로 인해 오류가 발생합니다.

find: warning: Unix filenames usually don't contain slashes (though pathnames do).  
That means that '-iname `/path/to/my/directory/*.qp'' will probably evaluate to false all the time on this system.  

어떻게 해야 하나요?

답변1

for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

두 명령 모두에 많은 문제가 있습니다. 특히, find출력을 반복하고 변수를 참조하지 못하여 특이한 파일 이름을 처리할 수 없습니다.

물론, 받은 오류에 명시된 것처럼 파일 이름에는 슬래시가 포함되지 않습니다.


당신이 원하는 것은 :

find /path/to/my/directory -type f -iname '*.qp' -exec sh -c 'for f in "$@"; do qpress -d "$f" "$(dirname "$f")" && rm "$f"; done' find-sh {} +

또는 개행 문자가 포함된 대체 버전:

find /path/to/my/directory -type f -iname '*.qp' -exec sh -c '
  for f
  do
    qpress -d "$f" "${f%/*}" &&
      rm "$f"
  done' find-sh {} +

추가 자료:

답변2

오류는 오류가 발생한 위치를 알려줍니다. 로 끝나는 파일명이 없습니다 /directory/*.qp. 이 -iname매개변수는 경로가 아닌 올바른 파일 이름에 관한 것입니다.

따라서 명령 앞에 원하는 find 명령을 추가하거나 작성해야 합니다 cd /path/to/my/directory/. 해당 디렉토리부터 시작하여 .find /path/to/my/directory/ -iname "*.qp"*.qp

관련 정보