텍스트를 파일 이름 앞에 대량 추가하는 방법은 무엇입니까? 예를 들면 : 파일 a.md,

.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

여기서, NAMEis 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

답변

mmv1 , 2 는 현재 작업에 적용되는 그러한 작업을위한 매우 좋은 도구입니다.

mmv '*.md' 'test - #1.md'

물론 a.md, b.md 및 c.md에는 “test-“만 추가하고 a1.md는 추가하지 않으려는 경우

mmv '?.md' 'test - #1.md'

더 적절할 것입니다.

특히 많은 문제가있는 경우 특히 제안 할 수 있습니다.

추가로 그래픽 인터페이스를 찾고 있다면 gprename을 시도 하십시오 .


답변

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;