
별도의 디렉토리로 이동해야 하는 291개의 번호가 매겨진 파일(001에서 시작하여 291에서 끝나며 제목)이 있습니다. (폴더 1의 경우 001~021, 폴더 2의 경우 022~053이며, 매번 파일 수가 동일할 필요는 없습니다.)
나는 다음과 같은 엉뚱한 방법으로 그것을 할 수 있다고 생각했습니다.ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
나는 더 나은 방법이 있다고 거의 확신합니다. 그렇다면 어떤 방법이 있을까요?
편집: 그러면 괜찮았을 텐데 기억이 나네요...
터미널 사용이 막히지 않아서 파일 관리자를 사용하여 클릭하고 드래그했습니다. 그래도 질문은 여전히 있습니다.
답변1
파일을 수동으로 이동해야 하는 것보다 항상 정확히 21개의 파일이 아니라고 말씀하셨기 때문에 효과적으로 수행하려면 다음을 사용할 수 있습니다.버팀대 확장:
mv filename{001..21} dir1
mv filename{022..53} dir2
...
답변2
그러면 설명한 대로 파일이 이동됩니다(두 번째 21개 파일의 경우 두 번째 범위가 022~042라는 점 제외).
for ((i = 1; i <= 291; i++))
do
((d = (i - 1) / 21 + 1))
printf -v file 'filename%03d' "$i"
printf -v dir 'dirname%02d' "$d"
[[ -d "$d" ]] && mkdir "$d"
mv "$f" "$d"
done
답변3
내 말은 많은 파일(예: 수만 개 또는 백만 개)을 이동한다는 것입니다. {1..20}만 사용하면 쉘이 파일 목록이 너무 길다고 불평할 것입니다.
~ 안에zsh, 당신은mv내장:
setopt Extended_glob zmodload
zsh/파일
그런 다음 다음과 같은 명령을 사용할 수 있습니다.
mv ./somefolder/{1..100000}.txt pathto/yourfolder/
또는 쉘 스크립트를 작성하는 경우 다음과 같이 할 수 있습니다.
for i in `seq $start $end`;
do mv "prefix${i}suffix.txt" pathto/yourfolder/
done
zsh를 사용하지 않는 경우 다음을 참조하세요.https://unix.stackexchange.com/questions/128559/solving-mv-argument-list-too-long