그래서 저는 초보자이고 직장에서 문제가 있습니다. 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
(괜찮다면 삭제하세요.)
ls
with는 -v
숫자순으로 정렬됩니다. 예를 들어 일반적인 어휘 순서인 between and 가 아닌 between and가 10.txt
됩니다 .9.txt
11.txt
1.txt
2.txt
paste
압축된 합계 ls
의 행입니다 your-program
.
xargs
한 번에 두 개의 행을 에 전달합니다 mv
.
-v
, -r
는 -d
GNU 확장이지만 시스템에는 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