아직 Linux 버전을 찾지 못했습니다.이름 변경자, Windows에서 읽을 수 있도록 1000개의 파일 이름을 바꿔야 합니다.
이 작업을 수행할 수 있는 Linux 프로그램을 아는 사람이 있습니까?
그렇지 않은 경우 폴더의 모든 파일 이름을 처음 16자로 바꾸므로 스크립트가 작동할 수 있습니다. 스크립트 경로를 계속할 가치가 있다고 생각하지만 어디서부터 시작해야 할지 모르겠습니다.
답변1
Debian, Ubuntu 및 그 파생 제품에서 man rename
명령 프롬프트에 입력하면 이름 바꾸기 유틸리티에 대한 매뉴얼 페이지가 표시되며, 이름 바꾸기에 Perl과 같은 임의의 정규식 명령을 사용할 수 있습니다.
예를 들어, 현재 디렉터리의 모든 파일을 길이 5로 줄입니다(잘림).
rename 's/^(.{5}).*/$1/' *
처음 5개 문자를 캡처한 다음 이를 대체하여 사용하고 나머지 문자를 제거하는 방식으로 작동합니다.
또 다른 예는 파일 이름(확장자 없음)을 5자로 줄이는 것입니다.구하다확장자 이름:
rename 's/^(.{5}).*(\..*)$/$1$2/' *
그것은 포착한다둘그룹, 첫 번째는 처음 5자이고 두 번째는 확장자입니다. 이것은 myCarefullyCraftedDocument.pdf
될 것입니다 myCar.pdf
.
경고하다:이것을 사용주의 깊은,바람직하게는복사디렉터리를 선택하거나 먼저 백업을 만드세요. 당신은 경고를 받았습니다! ! 적어도 rename -n
먼저 사용하면 실제로 실행하지 않고도 무엇을 할 것인지 알려줄 것입니다.
답변2
충돌하는 파일을 다른 디렉터리로 이동할 수 있습니다.
for i in *
do
j=${i:0:16}
if [ -e "$j" ]
then
mv "$i" /path/to/rename/later
else
mv "$i" "$j"
fi
done
답변3
몇 줄의 bash에서 파일 이름을 줄이고 Windows가 좋아하지 않는 문자를 제거하는 스크립트를 작성할 수 있습니다. 경고, 테스트되지 않은 코드가 내 브라우저에 직접 입력되었습니다.
shopt -s dotglob extglob
for x in *; do
y=${x//+([!-!#$%&'().0-9@A-Z^_`a-z{}~])/_} # change all problematic characters to _
if [[ $y = .* ]]; then y=_${y#.}; fi # change dot files to begin with _
y=${y:0:16} # truncate names
y=${y,,} # convert to lowercase
if [[ -e $y || $y =~ ^(aux|clock\$|com[0-9]|con|lpt[0-9]|nul|prn)(\.*)?$ ]]; then
# The file exists or is a DOS/Windows reserved name.
# Change foo.bar to foo~1.bar, foo~2.bar, ... (I ignore the length restriction here)
i=1
if [[ $y =~ \. ]]; then
prefix=${y%%.*}; suffix=.${y#*.}
else
prefix=$y; suffix=
fi
y=${prefix}~$i$suffix
while [[ -e $y ]]; do
((++i))
y=${prefix}~$i$suffix
done
fi
mv -- "$x" "$y"
done
하위 디렉터리로 재귀적으로 이동해야 하는 경우 에서 셸 스크립트를 호출하세요 find -depth -exec …
. 또는 zsh에서 bash 대신 zsh를 사용하면 **/*(od)
더 깊이 중첩된 파일부터 시작하여 현재 디렉터리의 모든 파일로 재귀적으로 확장됩니다.
답변4
일부 시스템에는 해당 명령이 없으므로 rename
paxdiablo의 답변에 대한 대안으로 사용 방법은 다음과 같습니다 mv
.
for f in *.pdf; do
tmp=`echo $f | sed -r 's//^(.{5}).*(\..*)$/$1$2/'`
mv -b ./"$f" ./"$tmp"
done
플래그를 이동하면 -b
삭제되거나 덮어쓸 파일의 백업이 생성됩니다. for 루프에서 glob 패턴을 변경하면 실행되는 파일을 조정할 수 있으며 *
이를 개별적으로 사용하여 모든 파일에서 실행할 수 있습니다.