우분투에서 mv 명령어를 사용하여 기존 폴더 내의 모든 파일을 다른 폴더로 옮기려고 했는데 파일이 너무 많고 용량이 커서 그런지 아래와 같은 에러를 뱉어냈다.
$ mv 기존 경로/* 이동할 경로/
bash : /bin/mv: Argument list too long
내가 옮기려던 파일은 10만장 가까이 되는 이미지 파일들이었으며 용량도 어마무시했다. 하지만 폴더 이동은 해야하고 mv 명령어는 안먹히고 어떻게 해야할지 고민 하다가 폴더 이름을 바꾸는 꼼수를 써 보기로 했다.
위에서 사용한 명령어는 기존 경로에 있는 파일 목록이 mv 인자로 들어가기 때문에 개수가 너무 많아지면 한번에 처리할 수 없어서 해당 에러를 뱉는다고 한다.
때문에 mv에 인자를 주는 것이 아니라 폴더 이름만 변경하는 식으로 꼼수를 쓰면 될 것 같았다.
폴더 이름을 변경한다는 것은 폴더 자체를 옮겨버린다는 말과 동일한데
$ mv 기존 경로/ 이동할 경로/
위와 같이 폴더 이름만 바꿔주면 오류 없이 파일들을 옮길 수 있다.
대신 해당 명령어는 '이동할 경로'가 존재하지 않아야만 한다. '이동할 경로'가 존재한다면 이동할 경로/기존 경로/로 하위 폴더가 생성되면서 파일이 이동하게 된다.
예를 들면 기존 경로인 /home/user/folder1/에서 /home/user/folder2/로 folder1 안에 있는 모든 파일을 옮기고자 할 때 folder2가 이미 존재한다면 /home/user/folder2/folder1/의 하위 경로가 생성되면서 이 하위 경로로 파일이 이동하게 되는 것이다.
때문에 folder2의 하위 폴더인 folder1로 파일을 옮길 생각이 아니라면 folder2는 생성하지 않은 채 해당 명령어를 사용하는 것이 좋다.