파일 복사 및 이름 바꾸기

파일 복사 및 이름 바꾸기

내 파일 구조는 다음과 같습니다.

My_Files:
        |-- Folder_1: 
        |           |-- a.txt
        |           |-- b.txt
        |           |-- c.txt
        |
        |-- Folder_2:
                    |-- a.txt
                    |-- b.txt

그런 폴더가 약 200 개 있습니다.

내가 원하는 것은:

내 파일을 복사하고 같은 이름의 파일 이름을 다음과 같은 폴더로 바꾸고 싶습니다.

Final_Folder: 
            |-- a.txt
            |-- b.txt
            |-- c.txt
            |-- a1.txt (Renamed)
            |-- b1.txt (Renamed)

내가 뭘 한거지:

이 명령을 사용했지만 결과를 찾을 수 없습니다.

find My_Files/ -type f -print0 | xargs -0 cp -t Final_Folder/

출력은 다음과 같습니다.

cp: 방금 생성된 "Folder_1/a.txt"를 "Final_Folder/a.txt"로 덮어쓰지 않습니다.

cp: 방금 생성된 "Folder_1/b.txt"를 "Final_Folder/b.txt"로 덮어쓰지 않습니다.

cp: 방금 생성된 "Folder_1/c.txt"를 "Final_Folder/c.txt"로 덮어쓰지 않습니다.

cp: 방금 생성된 "Folder_2/a.txt"를 "Final_Folder/a.txt"로 덮어쓰지 않습니다.

cp: 방금 생성된 "Folder_2/b.txt"를 "Final_Folder/b.txt"로 덮어쓰지 않습니다.

내 목표를 어떻게 달성할 수 있나요?

미리 감사드립니다.

답변1

시나리오를 고려하고 Folder 1, Folder 2, Folder 3 etc.실제로 의미가 있다고 가정하면(그렇지 않으면 문제를 피하기 위해 모든 파일 이름에 현재 타임스탬프를 추가할 수 있음) 다음을 사용합니다( Final_Folder미리 폴더가 있는지 확인).


find . -path ./Final_Folder -prune -o -type f -exec sh -c 'fn=$(basename -- {}) ; suffix=$(dirname {} | tr / _  ) ; cp {} ./Final_Folder/${fn%.*}$suffix.${fn##*.};   ' \;


파일 명명 체계는 다음과 같은 체계를 따릅니다.

[basename filename]._[basepath folder 1]_[basepath folder2]_[basepath folder[3..n].[extension]

즉, Final_Folder 콘텐츠는 다음과 같습니다.

a._Folder_1.txt
a._Folder_2.txt
a._Folder_3.txt
b._Folder_1.txt
b._Folder_2.txt
b._Folder_3.txt
c._Folder_1.txt
c._Folder_2.txt
c._Folder_3.txt

이 시나리오의 좋은 점은 계층 구조가 다음과 같다는 것입니다.

[YEAR]/[MONTH]/[DAY]/[filename a,b,c].txt

데이터를 수집할 때 흔히 하는 것처럼

최상위 디렉터리에서 위 명령을 실행하면 오늘 복사한 파일의 Final_Folder이름은 "

a._2019_11_10.txt
b._2019_11_10.txt
c._2019_11_10.txt
.
.
.
[a,b,c]._2019_11_10.[WITH OTHER EXTENSIONS]

특정 유형, 이름 또는 특정 연도, 월 또는 날짜 등의 파일을 정렬, 추출 또는 분석하는 것은 매우 간단한 문제입니다.

관련 정보