디렉터리 및 모든 하위 디렉터리에서 파일 형식을 이동하는 좋은 방법은 무엇입니까?
"/thisdir에 있는 모든 *.ogg를 /somedir로 재귀적으로 이동"하는 것과 같습니다. 나는 몇 가지를 시도했지만 최선을 다했습니다(여전히 그다지 좋지는 않았습니다).
find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;
각 파일 이름 앞에 각 줄을 반환합니다.
mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'
답변1
다음과 함께 find를 사용할 수 있습니다.매개변수이를 위해
find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir
위 명령의 -I는 xargs에게 사용하려는 대체 문자열을 알려줍니다(그렇지 않으면 명령 끝에 인수를 추가합니다).
또는
명령에서 mv
명령 뒤의 "{}"를 이동해 보세요.
find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;
답변2
zsh 또는 bash 4에서 모든 *.ogg
파일을 다음 위치에 수집합니다 /somedir
.
mv /thisdir/**/*.ogg /somedir
디렉터리 계층 구조를 재현하려면: (경고, 브라우저에 직접 입력하세요)
rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir
답변3
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;
당신은 mv의 매개변수를 바꿨습니다.
답변4
"디렉토리가 비어 있지 않습니다." 오류가 발생합니다. 이 문제를 해결하기 위해 다음을 실행합니다.
find . -name 'node_modules' -type d -prune -exec mkdir -p ./another/dir/{} \; -exec mv -i {} ./NODE_MODULES/{} \;
이렇게 하면 디렉터리 구조가 보존됩니다.