텍스트 파일의 이름을 사용하여 파일 이름을 일괄적으로 바꾸려면 핵심 유틸리티를 사용해야 합니다.

텍스트 파일의 이름을 사용하여 파일 이름을 일괄적으로 바꾸려면 핵심 유틸리티를 사용해야 합니다.

그래서 저는 초보자이고 직장에서 문제가 있습니다. IE에서 이름을 출력하는 프로그램이 있습니다

apple
banana
orange
P1n34ppl3

문제는 이 파일에 해당하는 파일(별도의 프로그램)이 1.txt 2.txt 등에만 있다는 점이다. 특정 디렉터리의 파일을 반복하고 핵심 유틸리티(예: mv, ls, grep, awk, sed)만 사용하여 텍스트 파일의 이름으로 이름을 바꾸는 방법이 있습니까? 시스템은 약간 오래되어 패치를 얻거나 새 프로그램을 사용하여 저장소에 연결할 수 없는 독립형 RHEL 상자입니다.

답변1

현재 작업 디렉터리에 출력 줄 수만큼 숨겨지지 않은 파일이 있고 your-program모든 파일 이름에 개행 문자가 포함되어 있지 않다고 가정하면 ksh 스타일 프로세스 대체(ksh)를 지원하는 셸에서 다음을 실행할 수 있습니다. , zsh, bash) 작동:

paste -d '\n' <(ls -v) <(your-program) | xargs -rn2 -d '\n' echo mv --

echo(괜찮다면 삭제하세요.)

lswith는 -v숫자순으로 정렬됩니다. 예를 들어 일반적인 어휘 순서인 between and 가 아닌 between and가 10.txt됩니다 .9.txt11.txt1.txt2.txt

paste압축된 합계 ls의 행입니다 your-program.

xargs한 번에 두 개의 행을 에 전달합니다 mv.

-v, -r-dGNU 확장이지만 시스템에는 GNU 유틸리티가 있어야 합니다.

가 있는 경우 다음을 zsh사용하여 보다 안정적으로 수행할 수 있습니다.

files=( *(Nn) ) # or *.txt(Nn) or <->.txt(Nn) for number.txt only
lines=( ${(f)"$(your-program)"} )
for old new (${files:^lines}) echo mv -- $old $new

관련 정보