방금 a라는 스크립트를 생성 하고 실행되도록 myscript
a를 실행했습니다 . chmod +x myscript
실행을 시도했는데 확장 프로그램을 myscript
잊어버렸다는 것을 깨달았습니다 ..sh
따라서 내 셸에서 다음 명령을 실행합니다 bash
.
mv myscript *.sh
...짜잔, 파일이 더 이상 존재하지 않습니다. 이름으로 검색해서 지난 1시간 동안 수정된 모든 파일 목록을 얻었으나 파일을 찾을 수 없습니다. 어디로 갔나요? 수리해야 할 다른 손상이 있습니까?
답변1
*.sh
현재 디렉터리의 패턴과 일치하는 적어도 하나의 디렉터리 또는 정확히 하나의 파일이 있을 수 있습니다 .
디렉터리인 경우 해당 디렉터리의 파일이
myscript
손상되지 않은 것을 확인할 수 있습니다. 예mkdir dir.sh mv myscript *.sh
이
mv
명령은 쉘 확장되어mv myscript dir.sh
파일이 해당 디렉토리로 이동됩니다.파일인 경우 해당 파일이 있음을 알 수 있습니다.교체됨그리고
myscript
. 예touch file.sh mv myscript *.sh
이
mv
명령은 셸에 의해 확장되고mv myscript file.sh
파일 이름이 바뀌어 파일에file.sh
포함될 수 있는 이전 내용을 덮어씁니다.현재 디렉토리에 일치하는 파일과 디렉토리가 있는 경우
*.sh
세트의 마지막 항목(로케일에 따른 영숫자 순서)이 파일인지 디렉토리인지에 따라 달라집니다. 모든 경우에 쉘은mv myscript file1.sh file2.sh lastdir.sh
또는와 같은 와일드카드 문자를 확장합니다mv myscript dir.sh file.sh
.- 디렉토리가 마지막 항목인 경우 셸과 일치하는 모든 항목은 해당 디렉토리로 이동됩니다.
- 파일이 마지막 프로젝트인 경우
mv
여러 프로젝트의 이름을 단일 대상으로 바꿀 수 없으므로 명령이 오류와 함께 실패합니다. (오류를 신고하지 않으셔서mv
이런 상황은 발생하지 않았던 것 같습니다.)
마지막으로, 현재 디렉토리에 패턴과 일치하는 항목이 없으면
*.sh
쉘은 패턴을 유지하고mv
이를 리터럴로 전달할 수 있습니다. 이 경우 명령은 파일 이름을 첫 번째 문자로 별표가 포함된mv
리터럴 문자열로 바꿉니다 .*.sh
나는 작업 #2가 무슨 일이 일어나고 있는지 식별할 가능성이 가장 높으며 패턴과 일치하는 파일의 원래 내용을 잃게 될 것이라고 생각합니다 *.sh
.