2017-05-11 1 views
3

AIX에서 ksh를 사용하고 있으며 디렉토리 구조는 아래와 같습니다.모든 하위 디렉토리를 삭제하지만 상위 디렉토리에 파일을 보관하는 방법은 무엇입니까?

dir/ 
    subdir1/file1 
    subdir2/file2 
    subdir3/file3 

은 정말 모든 하위 디렉토리 subdir1, subdir2 등을 삭제할. file1, file2 등의 파일을 dir에 보관하고 싶습니다. 다른 말로하면, subdirs에있는 모든 파일을 dir으로 이동 한 다음 모든 빈을 삭제하고 싶습니다. subdirs. 따라서 최종 결과는 다음과 같습니다.

dir/ 
    file1 
    file2 
    file3 
    .... 

어떤 명령을 사용해야합니까?

답변

2

먼저 파일을 위로 이동 한 다음 빈 하위 디렉터리를 제거하십시오. dir/에서 :

mv subdir*/file* ./ && rmdir subdir*/ 

/ 후 디렉토리 이름은 우리가 디렉토리를 처리하고 있음을 나타냅니다. 파일/디렉토리 이름을 일치시키기 위해 ? 또는 [:digit:]을 사용하여 더 정확하게 globbing을 얻을 수 있습니다.

find ./dir -mindepth 2 -type f -exec mv {} ./dir/ \; 

./dir에서 시작 ./dir의 첫 번째 수준 아래의 파일을 발견하고 ./dir로 해당 파일을 이동합니다

+1

OP는 빈 디렉토리 만 제거하려고하므로'rmdir'은'rm -r'보다 더 좋을 수 있습니다. 그래서,'mv subdir */file * ./ & rmdir subdir * /'. – codeforester

+1

@codeforester 그래, 조심스럽게 읽지 않았다. 감사. – heemayl

3

난 그냥 어떤 쉘에서 작동해야 find 명령을 사용하십시오. 빈 하위 디렉토리를 제거하려면

는 사용

find ./dir -mindepth 1 -type d -empty -delete 

경고 :이 파일 이름 충돌이 있어야 같은 이름을 가진 파일을 덮어 쓰게됩니다.

관련 문제