
이는 부분적으로 BASH에 대한 나의 지식이 매우 피상적이기 때문입니다.
스크립트는 다음과 같습니다.
eighteen=(2018*/*)
newe=`echo "$eighteen" | sed -e 's/\(-\)*$//g'`
while read f <&3 && read nf <&4; do
mv -v "${f}" "${nf}"
break
done 3<"$eighteen" 4<"$newe"
-
여러 하위 폴더의 모든 파일 이름 끝에 있는 기호를 작성하고 제거한 잘못된 스크립트를 만회하려고 합니다 .
내가 얻는 오류는 다음과 같습니다../cleanup.sh: line 16: 2018-08-13/untitled-102.arw: No such file or directory
mv
오류가 줄에서 발생하는 것이 아니라 다음에서 발생한다는 점은 주목할 가치가 있습니다 done 3<"$eighteen" 4<"$newe"
.
StackExchange의 답변에서 while 루프를 복사했습니다. 패스트푸드는 소화에 좋지 않은 경우가 많아 빠른 해결이 가능합니다. 이해를 돕기 위해 양해해 주시기 바랍니다. 이전에 언급한 대체를 호출하는 방법 4<"$newe"
nf <&4
과 자세한 내용을 알아보려면 어떻게 검색해야 하는지 힌트를 주세요 . while
진술의 맥락 외부에 적용됩니까 ?
답변1
적절한 도구를 사용하여 정규 표현식을 보존할 수 있는 간단한 결함이 있는 쉘 스크립트를 사용하고 있는 것 같습니다.
rename -n 's/-*$//' 2018*/*
-n
실제로 이름을 바꿀 수 있을 만큼 출력이 좋아지면 스위치를 제거합니다.
이 작업을 수행할 수도 있고 수행하지 못할 수도 있는 같은 이름의 다른 도구가 있으므로 주의하세요.
패키지의 일부인 이름 바꾸기 명령은 util-linux
그렇지 않습니다.
다음 명령을 실행하면:
$ rename
보시 perlexpr
다시피, 이것이 올바른 도구인 것 같습니다 =)
그렇지 않은 경우 이를 기본값으로 설정하고(일반적으로 이미 적용되어 있음) Debian
다음과 같이 파생시킵니다 Ubuntu
.
$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename
아치리눅스의 경우:
pacman -S perl-rename
RedHat 시리즈 배포판의 경우:
yum install prename
'prename' 패키지는 다음 위치에 있습니다.에펠저장소.
젠투의 경우:
emerge dev-perl/rename
*BSD의 경우:
pkg install gprename
또는p5-File-Rename
Mac 사용자의 경우:
brew install rename
다른 배포판에 이 명령이 없으면 패키지 관리자를 검색하여 설치하거나수동으로 수행(학과가 없어요...)
이 도구는 원래 Perl의 아버지인 Larry Wall이 작성했습니다.