내용을 삭제하지 않고 하위 디렉터리를 삭제하시겠습니까? [복사]

내용을 삭제하지 않고 하위 디렉터리를 삭제하시겠습니까? [복사]

많은 앨범과 개별 트랙이 포함된 Music이라는 디렉터리가 있습니다. 그 중 일부는 하위 디렉터리에 있습니다. 제가 원하는 것은 이 폴더를 삭제하고 음악 디렉토리의 모든 트랙을 분리 없이 믹스하는 것입니다.

손으로 하기가 힘들어서 좀 찾아봐야겠네요주문하다.

답변1

아니요find

shopt -s globstar
mv -nv **/*.mp3 /path/to/common/directory

답변2

find . -mindepth 1 -type f -exec mv -i "{}" /common/path \;
find . -mindepth 1 -d -type d -exec rmdir "{}" \;

이렇게 하면 현재 디렉터리의 모든 음악이 이동되고, /common/path두 번째 디렉터리는 모든 디렉터리가 삭제됩니다. 그런 다음 모든 것을 원래 디렉터리로 다시 이동할 수 있습니다.

또한 동일한 이름의 파일을 덮어쓸 것인지 묻는 메시지가 표시됩니다.

답변3

find /path/to/music/ -type f -execdir mv -n "{}" /path/to/sharedmusic/ \;

이름이 중복된 파일은아니요이동되지만 원래 위치에 유지됩니다.

답변4

하위 디렉터리의 모든 파일 검색을 완료한 다음 find 명령을 실행하고 해당 파일을 현재 디렉터리로 이동할 수 있습니다.

아래 답변에서 예를 찾을 수 있습니다. https://stackoverflow.com/questions/22388480/how-to-pipe-the-results-of-find-to-mv-in-linux

답변을 인용하면 다음과 같습니다.https://stackoverflow.com/a/22388545/879882

xargs일반적으로 이 목적으로 사용되며 이를 용이하게 하는 옵션이 mv있습니다 .-t

find ./ -name '*article*' | xargs mv -t ../backup

find당신이 지원 한다면 -exec ... \+당신도 할 수 있습니다

find ./ -name '*article*' -exec mv -t ../backup {}  \+

-t옵션은 GNU 확장일 수 있습니다. 물론 직접 시작할 수도 있습니다.

find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+

우리는 그 다음의 첫 번째 매개변수가 sh -c 'commands'"스크립트 이름" 매개변수로 끝나서 $0필요하지 않다는 편리한 사실을 뻔뻔하게 남용했습니다 shift.

관련 정보