디렉터리를 보존하지 않고 파일을 반복적으로 복사합니다.

디렉터리를 보존하지 않고 파일을 반복적으로 복사합니다.

MP3 파일이 포함된 디렉토리가 많이 있습니다. 이러한 디렉터리에는 내부에 다른 디렉터리가 포함되어 있지 않습니다.

파일을 삭제하지 않고 모든 디렉토리 구조를 제거하는 방법은 무엇입니까?

이는 기본적으로 해당 디렉터리에 있는 모든 파일을 현재 디렉터리로 이동합니다. 현재 디렉터리는 다른 디렉터리가 위치한 디렉터리입니다.

답변1

단일 find선형성:

find . -mindepth 2 -type f -execdir sh -c 'mv -vt ../ "$@" ; rmdir "$PWD"' _ {} +
  • -mindepth 2find명령이 현재 디렉터리의 파일을 무시 하게 됩니다 .
  • -execdir여기서 이것이 중요합니다. 이렇게 하면 find현재 디렉터리가 파일이 있는 디렉터리로 변경되고 그 안에 있는 명령이 해당 디렉터리 자체에서 실행됩니다.

  • mv -vt ../ "$@", 다음으로 확장됩니다.mv -vt ../ "file1" "file 2" "..." "fileN"

  • rmdir "$PWD"디렉터리가 삭제되고 -execdir모든 파일이 디렉터리로 마이그레이션된 후에 실행됩니다.상위 디렉토리.

조심하세요동일한 파일 이름을 가진 파일은 대상 경로로 이동할 때 덮어쓰이지 않습니다.

답변2

parent="$PWD"
for dir in *; do
    test -d "$dir" || continue
    pushd "$dir" || continue
    mv -i -- * "$parent"
    popd
    rmdir "$dir"
done

관련 정보