여러 파일의 확장자를 변경해 보세요

여러 파일의 확장자를 변경해 보세요

명령줄(Fedora)을 사용하여 현재 디렉터리에서 확장자가 "foo"인 모든 파일의 이름을 같은 이름으로 바꾸고 싶지만 확장자는 foo1입니다.

StackExchange에서 찾은 몇 가지 예를 시도했습니다.

rename foo foo1 *.foo

그리고

find . -name '*.foo' -execdir rename 's/\.foo$/.foo1/' \{} \;

둘 다 다음 오류를 여러 번 생성합니다.

rename: not enough arguments

어떤 아이디어라도 감사하겠습니다.

답변1

귀하의 사용이 rename모든 곳에서 작동하지 않을 수도 있습니다. 이를 달성하는 또 다른 방법은 및 일부 bash 대체를 사용하는 것 find입니다 mv.

find . -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;

참고할 몇 가지 사항이 있습니다.

나는 그것을 사용했지만 -exec작동하지 않았습니다 -execdir. 후자는 cd일치하는 파일의 디렉터리를 효과적으로 가리킵니다(파일에 대한 경로( 상대 경로 .)가 더 이상 올바르지 않기 때문에 원하는 것이 아닙니다). 당신이 원하는 것은 각 일치하는 파일에 대해 -exec주어진 명령 -name '*.foo'( {}일치하는 파일의 경로로 대체됨)을 실행하는 것입니다.

"${0%.foo}"확장자를 제거 하면 .foo가 됩니다 . 그런 다음 끝에 추가하면 가 추가 됩니다 .$0"hello.foo""${0%.foo}""hello".foo1"${0%.foo}.foo1""hello.foo1"

답변2

for루프를 사용하세요

for f in *.foo
do
    mv $f ${f/.foo/.foo1}
done

답변3

1이름이 처음에 다음으로 끝나는 모든 파일의 이름에 a를 추가합니다 .foo.

find . -type f -name '*.foo' -exec mv -i {} {}1 ';'

관련 정보