구글에서 특수문자 검색이 어려워서 여기에 글을 올립니다.
최근에 (루트로) 실행했는데 mv /tmp/folder/* /*
실행하려고 했을 때 mv /tmp/folder/* ./
완전히 틀렸습니다!
뭔가 고장났어요! 많은 파일이 난독화되어 이상한 위치에 배치되어 있으며 일반 UNIX 명령(ls, dir, cat 등)이 작동하지 않으며 일단 로그아웃하면 ssh를 통해 다시 로그인할 수 없습니다. 메시지가 표시되지만 이전 비밀번호를 수락하지 않습니다.
실행하면 ls /*
파일 이 .로 이동(또는 복사?)되는 /
평행선을 그리려고 하면 매우 이상한 일이 발생하고 도대체 무슨 일이 일어나고 있는지 궁금합니다.mv
/
추가 정보: /tmp/folder에 있는 파일은 Windows 컴퓨터에서 전송되며 이름은 (#).txt입니다. 여기서 (#)은 최대 두 자리 숫자이며 파일과 대괄호 사이에 공백이 있습니다. 대략 40개의 텍스트 파일이 있습니다.
답변1
이 mv
명령은 파일 또는 디렉터리일 수 있는 매개변수 목록을 사용합니다. 마지막 인수가 디렉터리인 경우 다른 모든 인수는 해당 디렉터리로 이동됩니다.
귀하의 경우 mv /tmp/folder/* /*
확장자 는 mv <the list of files in /tmp/folder> <the list of files in />
./tmp/folders/
/
/*
/var
답변2
당신이 상상하는 주장은 mv
틀렸습니다. 매뉴얼 페이지에서:
SYNOPSIS
mv [OPTION]... SOURCE... DIRECTORY
mv
많은 SOURCE
매개변수가 필요하지만 대상은 하나만 필요합니다 DIRECTORY
. mv
파일을 여러 대상으로 이동할 수 없습니다. 그렇지 않으면 복사해야 합니다. (당신이 말했듯이) /*
의 모든 디렉토리가 구문 분석되므로 /
마지막 디렉토리를 제외한 모든 디렉토리가 목록에 추가되므로 SOURCE
모든 디렉토리를 명령줄에 나열된 마지막 디렉토리로 이동합니다.
LiveCD에서 부팅하고 드라이브를 마운트하면 손상을 취소할 수 있습니다. 루트에는 단 하나의 디렉터리만 남게 되며(아마도 /var
) 루트에 있어야 하는 모든 디렉터리를 그 밖으로 이동할 수 있습니다. 예배 규칙서
답변3
명령이 정확히 무엇을 하는지 확인하려면, mv
쉘이 모든 와일드카드를 확장하고 결과 명령을 인쇄하도록 명령 앞에 추가하여 확인할 수 있습니다. 예를 들면 다음과 같습니다.echo
$ echo mv /tmp/folder/* /*
$ echo mv /tmp/* /*
mv /tmp/launch-4TgsLB /tmp/skl /bin /dev /etc /home /lost+found /mnt /net /opt /private /sbin /tmp /usr /var
따라서 기본적으로 파일은 루트 시스템의 마지막 폴더(예: /var
.
더 읽어보세요:mv *는 무엇을 하나요?