.md
다양한 이름 의 파일로 가득 찬 디렉토리가 있다고 가정 해 봅시다 . 각 파일 이름 앞에 “텍스트”를 추가하고 싶다고 가정하겠습니다. 그래서 예를 들면 : 파일 a.md
, b.md
그리고 c.md
될 것입니다 test - a.md
, test - b.md
하고 test - c.md
.
커맨드 라인을 통해 어떻게 이것을 할 수 있습니까?
답변
터미널에서 쉽게 입력 할 수있는 하나의 라이너 :
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
답변
당신이 있다면 prename
…
prename 's/^/test - /' *.md
일반 쉘 명령 사용 :
for file in *.md; do
mv "$file" "test - $file"
done
답변
mmv
1 , 2 는 현재 작업에 적용되는 그러한 작업을위한 매우 좋은 도구입니다.
mmv '*.md' 'test - #1.md'
물론 a.md, b.md 및 c.md에는 “test-“만 추가하고 a1.md는 추가하지 않으려는 경우
mmv '?.md' 'test - #1.md'
더 적절할 것입니다.
특히 많은 문제가있는 경우 특히 제안 할 수 있습니다.
답변
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는 파일 이름 만 인쇄하며 경로 구성 요소없이 이름 바꾸기 작업이 중단됩니다.
답변
나는 그것이 늦었다는 것을 알고 있지만, 다른 누군가가 이와 같은 것을 찾고 있다면 이것은 나를 위해 일했다.
rename '' 'name -' *.md
답변
zsh
사용 가능한 경우 다음을 사용할 수 있습니다 zmv
.
autoload zmv
zmv -w '*' 'test - $1'
다음을 사용하여 명령을 테스트 할 수 있습니다.
zmv -wn '*' 'test - $1'
-n
즉 드라 이런을 의미합니다.-w
암시 적으로 와일드 카드를 괄호로 묶고 역 참조를 수행합니다.
답변
bash에서 “Prepend text-“를 폴더의 모든 파일에 추가하십시오.
for i in *; do mv "$i" "$(echo $i | sed 's/^/Prepend\ text\ \-\ /')"; done;