많은 앨범과 개별 트랙이 포함된 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
.