답변:
터미널에서 쉽게 입력 할 수있는 하나의 라이너 :
for f in *.md; do mv "$f" "test - $f"; done
또는 세미콜론을 사용하는 대신 별도의 줄에 다시 작성하십시오.
for f in *.md
do
mv "$f" "test - $f"
done
구문 for
(의 sh
) :
for NAME [in WORDS ... ] ; do COMMANDS; done
여기서, NAME
is f
와 our WORDS
는 현재 디렉토리에있는 모든 파일과 일치 *.md
합니다. 따라서 변수 $f
는 일치하는 각 파일로 대체됩니다 *.md
.
그래서 a.md
:
mv "$f" "test - $f"
된다
mv "a.md" "test - a.md"
각 파일 이름에 $f
공백이 포함될 수 있으므로 따옴표가 중요 합니다. 그렇지 않으면 mv
각 단어가 별도의 파일이라고 생각합니다. 예를 들어 따옴표가없고라는 파일이 있으면 다음과 Foo Bar.md
같이 번역됩니다.
mv Foo Bar.md test - Foo Bar.md
의도 한대로 작동하지 않습니다. 그러나 $f
따옴표로 묶으면 의미가 있습니다.
mv "Foo Bar.md" "test - Foo Bar.md"
의 구문을 주목하면서 각 파일의 이름을 명시 적으로 지정 for
하여 모든 *.md
파일 의 서브 세트 이름을 바꿀 수도 있습니다 .
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
또는 쉘 확장 사용 :
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done
IFS 변수를 재정의하지 않으면 공백에서 실패하는 for 루프를 사용하는 대신 find와 결합 된 while 루프를 사용하는 것이 좋습니다. 다음은 파일과 동일한 디렉토리에서 실행될 때 작동합니다
find . -maxdepth 1 -type f -name '*.md' | while read -r file; do
file=$(basename $file)
mv "$file" "test - $file"
done
"basename"줄이있어 find는 파일 이름 만 인쇄하며 경로 구성 요소없이 이름 바꾸기 작업이 중단됩니다.
bash에서 "Prepend text-"를 폴더의 모든 파일에 추가하십시오.
for i in *; do mv "$i" "$(echo $i | sed 's/^/Prepend\ text\ \-\ /')"; done;
for i in *; do mv "$i$" "Prepend text - $i"; done