내 파일 구조는 다음과 같습니다.
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]
특정 유형, 이름 또는 특정 연도, 월 또는 날짜 등의 파일을 정렬, 추출 또는 분석하는 것은 매우 간단한 문제입니다.