find 명령을 처리하는 작업 디렉터리

find 명령을 처리하는 작업 디렉터리

pdf 파일을 스크립트에 전달하고 다양한 부분(예: 경로, 이름, 확장자)을 추출하여 조직 파일에 저장된 일부 관련 설명을 찾을 수 있습니다.

현재 작업 디렉토리에 경로가 포함되지 않은 파일을 처리하고 싶습니다(예: 또는 file.pdf대신 ). 현재 설정을 해야 하므로 문제가 있습니다 ../file.pdf/path/file.pdffdir

for fl in "$@"; do
   fnme=${fl##*/}
   fext=${fl##*.}
   fdir=${fl%/*}
   fnam=${fnme%.*}
   
   find "$fdir" -type f -name "${fnam}.org"
done

답변1

유틸리티를 사용하면 디렉터리 경로 없이 경로 이름 인수가 dirname올바르게 반환됩니다 ..

for pathname do
    name=$( basename "$pathname" )
    find "$( dirname "$pathname" ) -name "${name%.*}.org" -type f
done

로 끝나는 파일 이름을 다루고 있다는 것을 알고 있다면 .pdf다음을 사용할 수 있습니다.

for pathname do
    find "$( dirname "$pathname" ) -name "$( basename "$pathname" .pdf ).org" -type f
done

쉘이 있으면 zsh사용할 수 있습니다

for pathname
    find $pathname:h -name $pathname:t:r.org -type f
done

:h경로명의 "head"를 디렉터리 경로 부분으로 반환하고, :t파일 이름 부분인 "tail"을 반환합니다. 를 사용하여 확장자가 없는 파일 이름의 "루트"를 얻을 수 있습니다 :r.

원본 파일과 동일한 디렉터리만 확인하려는 경우 find재귀를 제한해야 합니다. -maxdepth 1최신 버전을 사용할 수 있습니다 find.

답변2

비어 있으면 기본적으로 ./검색 디렉터리를 사용할 수 있습니다. $fdir예를 들어:

find "${fdir:-./}"  -type f -name "$fnam.org"

관련 정보