이 폴더의 내용을 명령줄로 병합하고 싶습니다.
.
├── 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
.