ksh를 사용하여 파일의 여러 문자열 바꾸기

ksh를 사용하여 파일의 여러 문자열 바꾸기

모든 파일이 .로 시작하는 디렉토리가 있습니다 . 파일 이름만 .ear삭제하고 유지하고 싶습니다 . .ear할 수 있나요?

내가 시도할 때

cd /path/
ls >> file

그런 다음 출력 파일에 file저장된 디렉터리 이름 에는 .ear끝에 있는 파일을 포함하여 모든 파일이 포함됩니다. .ear파일 이름만 삭제하고 유지하고 싶습니다 .

답변1

/path.ear접미사를 제거하면서 디렉토리로 끝나는 파일 이름 목록을 생성하려면 다음을 수행하십시오 .

for name in /path/*.ear; do
    basename "$name" .ear
done >list

basename유틸리티는 경로 이름의 파일 이름 부분을 반환하며, 두 번째 인수가 제공되면 이 인수는 각 이름 끝에서 제거되어야 하는 문자열로 처리됩니다.

위의 루프에서는 패턴과 일치하는 파일만 반복하고 /path/*.ear접미사 없이 파일 이름을 추출한 .ear다음 목록을 이름이 지정된 파일에 씁니다 list.

이는 개행 문자가 포함된 파일 이름도 올바르게 처리합니다.

$'my.left.ear\ncollection 1.ear'

답변2

당신이 원하는 것:

ls *.ear | sed 's/\.ear$//' >list.txt

출력 사용이 마음에 들지 않으면 ls다음을 수행할 수도 있습니다.

printf "%s\n" *.ear | sed 's/\.ear$//' >list.txt

printf내장되지 않은(또는 ls위의 형식을 사용하는) 셸에서는 이론적으로 인수 수 제한에 도달할 수 있지만 이러한 EAR 파일이 나에게 익숙한 파일이라면 인수 수 제한을 얻지 못할 것입니다. 수천.

관련 정보