답변:
예를 들어 공백을 피 Spring\ 2011
하거나 따옴표를 사용하십시오 (예 :) 'Spring 2011'
. 앞으로는 * NIX에서 파일 이름에 공백이있는 파일 이름을 사용하는 것이 일반적으로 좋지 않습니다.
당신이 가지고 있다면 rename
, 당신은 이것을 사용할 수 있습니다 :
rename ' ' '_' [filenames...]
rename
버전 2.23)
머신에 rename 명령 이 있으면 현재 작업 디렉토리의 모든 파일 / 디렉토리에서 모든 공백이 밑줄로 바뀝니다.
rename 's/ /_/g' *
rename --version
rename from util-linux 2.23.2
있습니다.
rename
쉘만 사용하거나 선호 하지 않는 경우 :
for f in *\ *; do mv "$f" "${f// /_}"; done
세분화 :
*\ *
for
루프에 대한 입력으로 이름에 공백이있는 모든 파일을 선택합니다 . "$f"
파일 이름에 공백이 있다는 것을 알고 있기 때문에 따옴표 는 중요합니다 mv
. 그렇지 않으면 2 이상의 인수로 나타납니다 . ${f//str/new_str}
bash 특정 문자열 대체 기능입니다. 의 모든 인스턴스가 str
로 대체되었습니다 new_str
.for f in *\ *; do mv "$f" "${f// /_}"; done
그것을 사용 하면 작동
프로그래밍 방식으로 N 파일의 이름을 바꾸려면 간단한 bash
for 루프를 사용할 수 있습니다 .
#!/bin/bash
set -eux
# find all your files by using a `grep` pattern
pattern="insert_filename_pattern_here" # you must enter your filename pattern here
# create an array of filenames and split on newlines
IFS=$'\n'
tmp=($(ls | grep ${pattern}))
unset IFS
# for each filename
for filename in "${tmp[@]}"; do
# rename the filename to use "_" character instead of a " " character
mv -v "${filename}" "${filename// /_}"
done
파일 이름이 5 개 미만인 경우 모든 파일 이름을 수동으로 입력 rename
하고 위의 해결 방법 과 같이 명령을 사용할 수 있습니다. 그러나 나를 위해 ... 나는 4 개의 파일 만있을 때조차도 프로그래밍 솔루션을 선호합니다.
추신
Bash
의 매개 변수 확장에 익숙하지 않은 경우 다음 명령을 ${filename// /_}
사용할 수 있습니다 rename
.
if ((0)); then
mv -v "${filename}" "${filename// /_}"
else
rename ' ' '_' "${filename}"
fi
bash
for 루프를 사용 하십시오 . 여기에서 내 솔루션을 참조하십시오 .