답변:
명령
mv !(new) new
트릭을해야합니다. 작동하지 않으면 shopt -s extglob
먼저 실행하십시오 .
숨겨진 파일 / 디렉토리 (도트로 시작)를 이동하려면 shopt -s dotglob
먼저 실행하십시오 .
요약하자면 다음과 같습니다.
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
( dotglob
나쁜 놀라움을 피하기 위해 항상 설정 을 해제 하는 것이 좋습니다 ).
!(something)
있습니까?
dev
현재 위치 로 이동하려고 하면 실행해야합니까 mv !(dev) dev
?? 나는 얻는다-bash: !: event not found
setopt extendedglob
zsh에서 확장 글로브 모드를 설정합니다. ^
제외 기호이므로 mv ^new new
트릭을 수행하십시오. zsh에서 설정 한 모든 옵션을보고 setopt
사용 가능한 확장 글로브 모드를 비활성화하려면unsetopt extendedglob
나는 이와 같은 것을 찾았지만 이해하기가 조금 더 간단하며 당신에게도 잘 작동 할 수 있습니다.
ls | grep -v new | xargs mv -t new
위의 솔루션에 설명 추가하기 :
매뉴얼 페이지에서 :
mv -t
-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
grep -v
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
단계별 설명 :
ls
현재 디렉토리의 파일을 나열합니다grep -v new
새것과 일치하지 않는 파이프를 반환합니다.xargs mv -t new
파이프 된 파일 grep -v
을 대상 디렉토리 로 이동합니다.mv: illegal option -- t
. 내가 사용하고 있기 때문 zsh
입니까?
mv
(mv의 버전이 사용중인 것과 다르다는 것을 의미합니다) 어떤 운영 체제를 사용하고 있습니까? 나는이 답변을 쓸 때을 centos
사용하여 Linux 배포판에 있다고 생각 bash
합니다.
mv: illegal option -- t
osx의 mv에 -t
옵션 이 없기 때문에 동일한 오류가 발생 합니다.
zsh
중이므로 아마도 OS 일 것입니다 ..? 설명해 주셔서 감사합니다!
폴더의 모든 파일을 하위 폴더 중 하나로 옮기려면 다음 명령을 사용할 수 있습니다.
find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new
모든 파일을 찾은 다음 하위 폴더로 옮깁니다.
@waltinator :의 -type d -name 'new' -prune
통과를 방지하기 위해 추가되었습니다 /myuser/downloads/new
.
new
하고이 명령을했는데, 내가 얻을 mv: missing file operand
과Try 'mv --help' for more information
이 대체 과정을 시도해 볼 수 있습니다 – – 경로에 남아
/myuser/downloads/
하지만, 대신에 먼저 만드는 /myuser/downloads/new/
디렉토리 대신에 폴더를 만들 /myuser/
명령으로, 디렉토리 mkdir ../new
다음에있는 모든 파일을 이동 downloads
로 new
, 그리고 마지막으로 이동 new
로 downloads
. /myuser/downloads/
경로 에있는 동안 다음 명령을 사용하여 한 줄로 수행 할 수 있습니다 .
mkdir ../new && mv * ../new && mv ../new ../downloads
이후이 경우, 파일 / 폴더의 "필터링"모든 종류의에 대해 걱정할 필요가 없습니다 new
와 같은 경로의 동일한 수준에있다 downloads
, 그래서 당신은 모든 것을 이동할 수 downloads
로 new
, 다음 이동 new
downloads`에.
그러나, 당신은 이미 하위 폴더가있는 경우 new
생성을하고, 또 다른 하나를 만드는 데 걱정하지 싶지 않아 - 단지 변경 mkdir
최초의 왼쪽에 명령을 &&
에 위에 표시된 명령에 mv
밀어 명령 new
에서 통로; 당신이 여전히있는 동안 즉 /myuser/downloads/
, 당신은 변경할 수 있습니다 mkdir ../new
로 mv new ..
. 그런 다음 new
[경로에있는 /myuser/downloads/new/
] 하위 폴더 /myuser/new/
가와 동일한 수준으로 위로 올라간 /myuser/downloads/
다음 위에 표시된대로 나머지 명령을 실행할 수 있습니다. 모두 함께, 우리는 경로에서 시작했습니다 /myuser/downloads/
.
mv new .. && mv * ../new && mv ../new ../downloads
"다운로드 폴더에있는 모든 파일과 폴더 / 하위 폴더를 하위 폴더 [ new
] 로 옮기고 싶었 으니 끝났습니다! 이동할 싶었다 경우 에만 파일 (또는 단지 [더 세분화 된 오브젝트의 움직임을 삽입] 폴더 또는), 당신은 다른 명령을 사용해야하는 것 그 같은 수있는 "필터"객체 grep
. 그러나 위에 작성된 명령은 사용자의 목적에 충분합니다.
mv * new
불구하고 "새로운 것을 새로운 것으로 바꿀 수 없습니다"또는 이와 유사한 것이있을 것입니다. 아마mv -i * new
당신에게 덮어 쓰기를 방지합니다.