충돌 시 복사 및 이름 바꾸기

충돌 시 복사 및 이름 바꾸기

명령줄을 사용하여 이 폴더의 내용을 병합하고 싶습니다.

.
├── folder1
│   │ file.txt
├── folder2
│   │ file.txt
└───folder3
    │ file.txt

어떻게 해야 하나요?

답변1

cp마침내 나는 이것을 사용하여 이것을 할 수있었습니다--backup배너.

cp --backup=numbered */*.txt new_directory/

답변2

다음 명령줄 루프는 현재 디렉터리에 있는 "folder*"라는 각 폴더의 (최상위) 내용을 "new_directory"라는 디렉터리에 복사합니다. 기본적으로 glob은 /*"점 파일"과 일치하지 않습니다. shopt -s dotglob이 동작을 변경하려면 . 동일한(기본) 파일 이름이 new_directory에 이미 존재하는 경우 대상 파일 앞에 원래 폴더(및 밑줄)를 추가하여 고유하게 만듭니다.

한 줄에 모두 :

for f in folder*/*; do [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }; [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"; done

읽기 쉽도록 분류:

for f in folder*/*
do 
  [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }
  [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"
done

계획이 있다면이동하다그냥 원래 위치에서 파일을 cp변경합니다 mv.

관련 정보