다음과 같은 디렉토리가 많이 있습니다.
./lab-results.n3668.2017-01-16
./lab-results.n471.2017-02-24
./tests.n287.2017-01-28
./tests.n4501.2017-03-04
불행하게도 그 안에는파일 하나만그러나 이름은 동일합니다.
./lab-results.n3668.2017-01-16/lab-results.pdf
./lab-results.n471.2017-02-24/lab-results.pdf
./tests.n287.2017-01-28/tests.pdf
./tests.n4501.2017-03-04/tests.pdf
다음과 같이 이름을 바꾼 후 이 모든 파일을 이동하고 싶습니다.
./lab-results.n3668.pdf
./lab-results.n471.pdf
./tests.n287.pdf
./tests.n4501.pdf
따라서 sh 스크립트를 본 것 같지만 디렉토리 이름 문자의 일부를 사용하여 파일의 향후 이름을 구성하는 방법을 모르겠습니다.
lab-results.n9999 : max number available, will not change
tests.n9999 : max number
다른 디렉터리도 있을 수 있지만 해당 디렉터리의 이름 뒤에는 항상 여러 개의 숫자가 표시됩니다.
./xxxxxxx.n9999
./yyyyyy.n9999
./zzz.n9999
어떤 조언이나 도움이라도 대단히 감사하겠습니다. 저는 Linux 배포판에서 bash 4.3.11(1)을 사용하고 있습니다.
답변1
for F in */* ; do echo mv "$F" "${F/.2017*/.pdf}" ; done
또는 스크립트로:
#! /bin/bash
for F in */*
do
echo mv "$F" "${F/.2017*/.pdf}"
done
단지 그것이 무엇을 할 것인지 보여줄 뿐입니다. 원하신다면 삭제 echo
하고 실행해 보세요.
비결은 다음과 같습니다. 파일명 + 경로로 검색하여 ${F/.2017*/.pdf}
로 대체합니다..2017*
.pdf
답변2
rename 's|^(\./[^.]*\.[^.]*).*|$1.pdf|' ./*.*.*/*.pdf
- 최소 2개의 포인트가 있고 PDF 파일이 포함된 디렉토리를 선택합니다.
- 그런 다음 처음 두 지점까지 정보를 유지하고 새 파일 이름을 만듭니다.
- 이는 Debian 기반 시스템에 가 있다고 가정
rename
합니다 . 다른 시스템에는 또는 .perl-rename
perl-rename
rename
perl-rename
prename