찾기 및 ls 출력

찾기 및 ls 출력

모든 .mp4 동영상을 텍스트 파일로 출력하는 데 문제가 있습니다. 작동하지만 뭔가 이상한 일이 일어나고 있으며 그 이유를 잘 모르겠습니다.

이것은 명령입니다.

find "/volume1 HD FILMS" -iname "*.mp4" -type f -exec ls {} \; > "/volume1/3. HD FILMS/HD_FILMS_`date +%d.%m.%Y`.txt"
  1. 왜 경로를 출력합니까? 디렉토리의 ls가 파일을 인쇄할 때(그것이 내가 원하는 것입니다)
  2. 출력 파일이 알파벳 순서가 아닌 이유는 무엇입니까? (디렉토리의 ls와 다시 비교하면 무작위로 보입니다.)

이러한 문제를 어떻게 해결할 수 있습니까?

답변1

정확한 질문에 답하려면:

왜 경로를 출력합니까? 디렉토리의 ls가 파일을 인쇄할 때(그것이 내가 원하는 것입니다)

당신이 때문에 경로를 출력합니다아니요디렉토리 내에서. ls somedir와 다릅니다 cd somedir; ls.

출력 파일이 알파벳 순서가 아닌 이유는 무엇입니까? (디렉토리의 ls와 다시 비교하면 무작위로 보입니다.)

ls파일을 알파벳순으로 정렬한 후 출력합니다.모두. 따라서 인쇄하기 전에 정렬할 수 있는 기회가 있습니다.

findwith를 사용하고 -execwith 명령을 종료 하면 명시적 으로 명령(이 경우 명령) 을 실행하라는 \;의미입니다.findls모든발견된 파일로 find. 따라서 정렬하는 것은 불가능합니다.

이것을 사용한 경우 ls -l각 인쇄 줄이 실제로 다른 명령에서 출력되기 때문에 열이 올바르게 정렬되지 않은 것을 알 수 있습니다.

대신, 꼭 필요한 경우 find ... -lsor 또는 를 사용하는 것을 고려해 보세요 .find ... -print-exec ls당신은 그것을 사용할 수 있습니다-exec ls {} +, 대부분의 정렬을 처리해야 합니다. (구체적으로는 모든 파일을 함께 정렬할 수도 있지만, 그 수가 너무 커서 시스템 용량을 초과하는 경우에는 별도의 명령을 사용해야 하며 ARG_MAX, 개별 배치는 개별적으로 정렬됩니다.)findls


노트:개인적으로 나는 이와 같은 파일 이름 목록을 텍스트 파일에 저장하지 않을 것입니다.할 수 있는개행 문자를 포함합니다. 텍스트 파일을 개별 파일 이름으로 구문 분석하는 확실한 방법은 없습니다. 기간. (바라보다아니요분석 ls?)

대신 find명령을 실행하면 됩니다.내가 뭔가 하고 싶을 때파일과 함께 미리 실행한 다음 이전 출력으로 작업을 수행하지 마십시오.

사람이 읽을 수 있는 모든 파일 목록을 생성하려면 mp4경로 구성 요소를 제거하여 이러한 파일 이름에 의존할 수 없다는 점을 강조하고 싶습니다.

find "/volume1 HD FILMS" -iname "*.mp4" -type f -print | sed 's:.*/::;s/\.[mM][pP]4$//' > "/volume1/3. HD FILMS/HD_FILMS_$(date +%d.%m.%Y).txt"

관련 정보