명령줄(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 ';'