Linux에서 대시가 포함된 모든 하위 디렉터리의 모든 .jpg 파일 이름을 바꾸는 방법은 무엇입니까?

Linux에서 대시가 포함된 모든 하위 디렉터리의 모든 .jpg 파일 이름을 바꾸는 방법은 무엇입니까?

대시가 있는 하위 폴더가 있습니다(이름이 cd인 하위 디렉터리의 예). 모든 하위 디렉터리의 모든 .jpg 파일 이름을 바꿔야 합니다. 그것을 수행하는 방법에 대한 조언이 있습니까? 다양한 옵션을 시도했지만 도움이 되지 않았습니다. (내 하위 폴더에 대시가 포함되어 있기 때문인 것 같습니다. -) 감사합니다! :)

나는 시도했다

find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;

하지만 점점

(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"

답변1

이름을 바꾸는 경우는 없습니다. mv로 이름을 바꿀 수 있기 때문입니다.

find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

mv -i는 대화형을 의미합니다. 덮어쓰기 전에 묻습니다.

이는 파일이 다른 이름을 갖게 되는지 확인하기 위한 심층적인 테스트가 아니며 임시적으로 수행됩니다. 좀 더 테스트해 보면 다음과 같습니다.

find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

그러나 이렇게 하면 모든 파일이 현재 디렉터리에 저장됩니다. 어쩌면 -execdir을 사용하는 것이 옵션일까요?

find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

그러나 백업을 만들고 데이터 등에 주의하십시오. 찾기를 통한 대량 행동은 날카로운 도구입니다. 나는 책임을 지지 않습니다.

AFAIK 대시에는 이 경주에 말이 없습니다.

답변2

당신은 불분명하다어떻게파일 이름을 바꾸려고 합니다. 한어느find파일 이름을 바꾸려면 대시가 포함된 원하는 패턴에 따라 모든 파일을 일치시키는 데 사용할 수 있습니다 .

find [PATH...] -type f -name '*-*' | prename EXPR

디렉터리도 일치시키려면 다음 -depth옵션을 사용해야 합니다.

find [PATH...] -depth -name '*-*' | prename EXPR

답변3

방금 이름에 대시가 있는 하위 폴더에 대해 이것을 시도했는데 작동했습니다.

Linux/Ubuntu에서 파일 이름의 일부 이름을 재귀적으로 바꾸기

파일 이름을 바꾸려면찾다와 함께 명령이름 바꾸기다음과 같은 명령:

find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;

따라서 모든 jpg 파일 이름의 모든 대시 "-"를 밑줄 "_"로 바꾸려면 다음을 입력합니다.

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;

관련 정보