제가 저지른 어리석은 실수로 인해 오디오 컬렉션의 일부가 손실되었습니다. :-(
최근 백업이 있어서 다행이지만 여전히 짜증스럽습니다. 실제 백업 외에 또 다른 장난의 원인은 mv
다음과 같이 표시된다는 것입니다.
오디오 파일에는 특정 구성표가 있습니다.
ARTIST - Some Title YY.mp3
YY
두 자리 연도 사양은 어디에 있습니까?
mkdir 90<invisible control character>
(지금까지는 눈에 보이지 않는 추가 문자의 1/3을 실제로 입력하고 있다는 사실을 전혀 몰랐습니다...!)
모든 것을 하나의 디렉토리에 넣는 대신 90년대 음악을 모두 하나의 디렉토리에 넣기를 원했습니다. 그래서 나는 다음을 입력합니다:
find . -name '* 9?.mp3' -exec mv {} 90 \;
무슨 일이 일어나고 있는지 이해하는 것은 어렵지 않죠? :->
(비극적인) 결과는 처녀였습니다.비어 있는"90"이라는 디렉토리무엇' (그리고무엇"보이지 않는" 제어 문자입니다) 및파일"90"이라고 불리는N이류.
모든 파일이 사라졌습니다. :-(( (확실히)
mv
그러길 바라확인됨시간 내에 대상 "파일"이 서명되었는지 여부(*NIX에서 기억:모든 것이 파일이다d------
)는 (예 : ) 로 시작합니다 drwxr-xr-x
. 물론 목적지에 관계없이존재하다별말씀을요. 단순히 다음과 같은 경우 위 시나리오에 변형이 있습니다.잊다먼저 mkdir
디렉토리로 이동하십시오. (물론 거기에 있다고 가정하겠지만...)
우리가 싫어하는 운영체제도 대문자로 시작해요와트그렇습니다. 당신은 균등화 할 수 있습니다힌트필요한 경우 대상 유형(파일? 디렉터리?)을 지정합니다.
mv
그래서 우리 *NIX 사용자가 이러한 최소한의 놀라움을 피하기 위해 여전히 "스크립틀릿"을 작성해야 하는지 궁금합니다 .
답변1
/
파일을 디렉터리로 이동하려면 대상 위치에 를 추가하면 됩니다. 디렉터리가 존재하지 않으면 다음 오류가 발생합니다.
mv somefile somedir/
mv: cannot move ‘somefile’ to ‘somedir/’: Not a directory
디렉터리가 있으면 파일을 해당 디렉터리로 이동합니다.
답변2
GNU coreutils mv
에는 이동하려는 디렉토리를 지정하는 옵션( -t
/ ) 이 이미 있습니다 --target-directory
. 이 옵션에 대한 인수가 존재하지 않으면 mv
모든 파일을 동일한 파일 이름으로 이동하는 대신 오류가 발생합니다.
나는 당신의 포터에게 다음과 같이 쓸 것입니다 :
find . -name '* 9?.mp3' -exec mv -t 90 {} +
+
대체를 사용하면 \;
실행 속도를 높이기 위해 가능한 한 많은 파일 이름을 결합합니다.
답변3
또한 일반적으로 향후 우발적인 보장을 방지할 계획이라면 개인적으로 -i
다음과 같은 옵션이 있을 수 있습니다.mv
alias mv='mv -i'
무언가를 재정의해야 하는 경우 해당 -f
옵션을 전달하면 됩니다.
별칭은 대화형 셸에 직접 명령을 입력하는 경우에만 적용되지만 via의 경우에는 find
.
find . -name '* 9?.mp3' -exec mv -i {} 90 \;
mv
그러면 기존 파일을 덮어쓸 것인지 묻는 메시지가 표시됩니다 .
답변4
대체 일반 전략으로 이 작업을 임시 스크립트로 전환하는 것이 좋습니다. 나는 결과를 보고 수동으로 명령 find
으로 변환하여 mv
실행하기 전에 수행 중인 작업을 확실히 이해하는 것을 선호합니다. 예를 들어.
find . -name '* 9?.mp3' > tmp
vim tmp
이제 파일 이름 목록을 보고 파일 내용을 셸 명령으로 다시 쓸 수 있습니다.
- 파일 내용을 한 줄에 입력하세요.
ggVGJ
- 접두사:
Imv
[esc]
- 추가의:
Asomedir/
[esc]
- 문서를 저장합니다. 다시 읽어보세요. 숨을 쉬십시오.
source tmp
명령줄에서 실행됩니다.
이는 보수적인 전략이지만 명령을 잘못 입력 -exec
하거나 sed
셸 확장을 오해하는 경우가 종종 있으므로 느리고 일관된 접근 방식을 선호합니다.
즉, 나는 그것을 사용하기에는 너무 소심합니다 -exec
.