"파일"(응용 프로그램 생성 이름 : Microsoft Word)의 결과를 사용하여 특정 문자열을 검색하는 방법은 무엇입니까?

A. 미스트

내가 지정한 파일에 대한 정보를 반환하는 "파일"의 결과를 사용하려고합니다.

file *.doc 'all .doc extensions

그러면 "Name of Creation Application : Microsoft Word"를 포함한 파일에 대한 정보가 반환됩니다. 이제 "Word"문자열에 대한 결과를 검색하려고합니다. 나는 여기에 갇혀있다. 실제로 어떻게합니까?

* 이것은 몇 시간의 검색 후에 시도한 것입니다. 내가 찾는 단어가 무엇인지 모르겠습니다. 조언하십시오.

find . -type f -print0 | xargs -0 grep -lh "Microsoft Word" | xargs -I % mv % ../NewDirectory/

파일 자체에서 "Word"문자열을 검색하여 새 디렉토리로 이동한다고 생각합니다.

Gilles 'SO- 그만 사악함'

내가 올바르게 이해했다면 현재 디렉터리와 하위 디렉터리에서 다른 디렉터리로 재귀 적으로 파일을 이동하려고합니다. 그러나 file명령이 "Microsoft Word"파일로보고하는 경우에만 해당됩니다 . 즉, file "$filename" | grep 'Microsoft Word'일부 출력 생성 하는 파일에 관심이 있습니다 .

쉬운 방법은 차분하게 물건을 파일별로 가져가는 것입니다. 현재 디렉토리에있는 파일 만 원하는 경우 for루프와 와일드 카드 패턴을 사용할 수 있습니다 .

for f in *.doc; do
  if …
done

조건은 무엇입니까? Microsoft Word의 출력에 나타나는지 테스트하고 싶습니다 file "$f". file --이름이로 시작하는 파일로부터 보호하기 위해 사용 합니다 -.

for f in *.doc; do
  if file -- "$f" | grep -s 'Microsoft Word'; then
  fi
done

파일을 이동하는 명령을 추가하기 만하면됩니다.

for f in *.doc; do
  if file -- "$f" | grep -s 'Microsoft Word'; then
    mv -- "$f" ../NewDirectory/
  fi
done

하위 디렉토리에서도 파일을 찾으려면 재귀 globbing에 **wilcdard 패턴사용하십시오 . bash에서는 활성화해야합니다 shopt -s globstar(ksh93에서는, set -o globstarzsh에서는 즉시 작동합니다. 다른 쉘에는이 기능이 없습니다). bash ≤4.2는 디렉토리에 대한 심볼릭 링크를 따릅니다.

for f in **/*.doc; do
  if file -- "$f" | grep -s 'Microsoft Word'; then
    mv -- "$f" ../NewDirectory/
  fi
done

이동 된 모든 파일은로 끝나고 ../NewDirectory/하위 디렉토리가 생성되지 않습니다. 디렉토리 트리를 재현하려는 경우 문자열 조작 구문 을 사용하여 파일 이름의 디렉토리 부분을 추출하고 mkdir -p필요한 경우 대상 디렉토리를 만들 수 있습니다.

for f in ./**/*.doc; do
  if file "$f" | grep -s 'Microsoft Word'; then
    d="${f%/*}"
    mkdir -p ../NewDirectory/"$d"
    mv "$f" ../NewDirectory/"$d"
  fi
done

file다소 취약한 의 출력을 구문 분석하는 대신 file -i표준화 된 문자열을 인쇄 하는 구문 분석을 선호 할 수 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관