충돌 시 복사 및 이름 바꾸기

충돌 시 복사 및 이름 바꾸기

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

.
├── 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's를 's로 변경하면 됩니다 mv.

관련 정보