동일한 확장자를 가진 다른 이름의 파일을 정규화된 파일 이름을 가진 모든 파일에 복사하는 방법은 무엇입니까?

동일한 확장자를 가진 다른 이름의 파일을 정규화된 파일 이름을 가진 모든 파일에 복사하는 방법은 무엇입니까?

예를 들어 다음과 같이 다른 하위 디렉터리에 다른 이름을 가진 파일이 있습니다.

a/apple.txt
b/orange.txt
c/pear.txt

최종 결과가 다음과 같도록 통일된 이름(fruit.txt)을 사용하여 해당 디렉터리에 어떻게 복사합니까?

a/apple.txt
a/fruit.txt
b/orange.txt
b/fruit.txt
c/pear.txt
c/fruit.txt

(a/apple.txt와 a/fruit.txt 파일의 내용이 동일해야 합니다)

내 생각은 다음과 같습니다.

find . -name "*.txt" -exec cp {} fruit.txt \;

하지만 이것이 Fruit.txt를 해당하는 모든 하위 디렉터리에 넣을 것인지, 아니면 그냥 현재 디렉터리에 넣을 것인지는 확실하지 않습니다.

답변1

주문,

find . -name "*.txt" -exec cp {} fruit.txt \;

현재 디렉토리 안이나 아래에 .txt파일 이름 접미사가 있는 모든 파일(및 디렉토리 등)을 올바르게 찾아서 모두 복사합니다.fruit.txt현재의목차.

당신이 원하는 것은 원본 파일과 동일한 디렉토리에 복사하는 것입니다.정기적인fruit.txt파일을 삭제하고 이미 존재하는 이름 도 피하세요 .

find . -type f -name '*.txt' ! -name fruit.txt -execdir cp -- {} fruit.txt \;

비표준(그러나 일반적으로 사용되는) -execdir조건자를 사용하는 경우 사용하는 명령은 찾은 파일의 디렉터리 내에서 실행됩니다. 이는 위의 코드가 파일을 찾은 파일과 동일한 디렉터리 cp에 복사한다는 의미입니다.fruit.txt

원하는 효과에 따라 파일 복사본 대신 기호 링크를 사용할 수 있습니다.

find . -type f -name '*.txt' ! -name fruit.txt -execdir ln -sf -- {} fruit.txt \;

관련 정보