리눅스 파일 서버 (RedHat Enterprise)에는 우리가 이름을 바꿀 필요가있는 몇몇 폴더가 있습니다. 이전 폴더 형식 (변경해야하는 형식)은 clientcode_jobnumberjobname
입니다. 새 형식은 clientcode_jobnumber_jobname
입니다. 기본적으로 jobnumber
과 jobname
사이의 폴더 이름에 추가 밑줄을 추가하여 이전 폴더 이름을 변경해야합니다. 또한 새로운 형식으로 표시되도록 생성되는 모든 새 폴더 구조가 있으므로 변경하지 않아도됩니다. 작업 번호는 항상 1 문자 다음에 4 숫자가옵니다. 클라이언트 코드는 클라이언트에 따라 3-4 자입니다. 작업 이름은 모든 작업마다 다릅니다. 폴더는 모두 clients/clientname/jobs/clientcode/"folder that needs to be renamed"
에 있습니다 (스크립트가 구조 안으로 들어가야하는 예제). 각 클라이언트의 각 clientcode
에 대해이 작업을 수행해야합니다. 이 작업을 수행하는 스크립트를 어떻게 설정합니까? 어떤 도움이 크게 apprciated 것입니다. 이름을 바꿀 필요가있는 수천 개의 폴더가 있습니다.bash 리눅스 - 방대한 폴더 이름 바꾸기
답변
파일 이름에 sed와 같은 역할을하는 몇 가지 명령이 있습니다. mmv
(또는 RHEL에서 찾을 수없는 rename
, 이전 이름 또는 rename.PL의 perl 변형)을 시도하십시오.
보너스로 두 가지 모두 -n
옵션 (작동 안함)이 있습니다. 따라서 할 일을 확인하면 문제가 발생하거나 정보를 잃지 않을 것입니다.
for entry in * ; do
if [ ! -d "$entry" ] ; then
continue
fi
jobname="${entry##*_?????}"
dirbase="${entry%$jobname}"
if [ -z "$dirbase" -o -z "$jobname" ] ; then
echo "Error with '$entry'"
continue
fi
mv "$entry" "${dirbase}_$jobname"
done
아마도 나이지만, 디렉토리 구조가 어떻게 보이는지 정확히 알지 못합니다. 일부 코드 태그 내에 예제를 제공해 주시겠습니까? Noufal 이브라힘, 저항 :
그리고 아마도이 serverfault.com에 있어야
EDIT (!하지만 난 #은/빈/SH 스크립트 프로그래밍으로 간주 추측)? 모든 POSIX 호환 버전 또는 리눅스에서 작동하는 방식을 사용하고 있습니다. 그러나 Solaris 머신에는 rename
또는 mmv
이 포함되어 있지 않습니다. 따라서 그러한 해결책은 불가능합니다. 당신이 이름 형식은 고도로 구조화 말하는 모든 것이 하나의 부모 아래에 있기 때문에
(중 당신이 언급 한 것과 있는지 직접 또는 간접 children..not로), 나는 이것을 제안 :
정기적 만들기 표현식을 사용하고 정규 표현식과 비교하여 대상 폴더의 내용 (이름을 바꿀 폴더가있는 이름)과 일치하는 작은 perl 스크립트를 작성하십시오. 일치하는 항목이 있으면 폴더의 이름을 새 이름으로 바꿉니다. Perl은이 모든 것을 쉽게 만듭니다.
당신이이 접근법을 추구하기로 결정한 경우에 대비하여 Perl을 알지 못하고 어디서부터 시작해야하는지 궁금해하고 내가 배우는 과정에 관심이 있다면 나는 " Minimal Perl "... 괴물 같은 언어를 배우고 지금 필요한 것과 비슷한 것들을 사용하는 빠르고 재미있는 방법.
희망이 도움이됩니다.
find /path/clients -type d -name "*_?[0-9][0-9][0-9][0-9]*" | while IFS= read -r DIR
do
dir=${DIR##*/}
base=${DIR%/*}
IFS="_"
set -- $dir
front=$1
back=$2
jobname=${back#?????}
jobnum=${back%$jobname}
newname="${front}_${jobnum}_${jobname}"
echo mv "$DIR" "$base/$newname"
done
+1 코드화하려는 욕구에 저항하기 때문에. –
RH 이름 바꾸기는 데비안 이름 바꾸기와 다르기 때문에 여기서는 작동하지 않습니다. –
때로는 '이름'이라고도합니다. –