번호가 매겨진 파일 범위를 이동 하시겠습니까?


14

별도의 디렉토리로 이동 해야하는 291 개의 번호가 매겨진 파일 (001에서 시작하여 291에서 끝나는 제목)이 있습니다. (001 ~ 021은 폴더 1에, 022 ~ 053은 폴더 2에, 매번 반드시 같은 수의 파일 일 필요는 없습니다).

나는 이렇게 유쾌한 방법으로 그것을 할 수 있다고 생각했다. ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh

나는 더 좋은 방법이 있다고 거의 긍정적입니다. 그렇다면 어떻게 될까요?

편집 : 그래서 그것은 잘 작동했을 것입니다,하지만 나는 기억 ...

터미널을 사용하지 않아서 파일 관리자를 사용하여 클릭하고 드래그했습니다. 그래도 질문은 여전히 ​​유효합니다.


1
폴더 1에 21 개의 하위 폴더가 있고 폴더 2에 22 개의 폴더가 있습니까?
Daniel Beck

unix.SE를 검토 했습니까? 여기에 좋은 스레드가 있습니다 : unix.stackexchange.com/questions/12976/…
chrisjlee

@DanielBeck 아니오, 파일을 각 폴더로 옮기고 싶습니다. 각 폴더에는 다른 수의 파일이 있습니다.
Rob

@ ChrisJ.Lee 그것은 내가 한 일과 아주 비슷합니다. 파일이 다른 폴더의 다른 파일과 일치하기 때문에 ls -l | grep ^- | wc -l줄 수 를 얻을 수 있습니다.
Rob

1
@ 롭 맞아. 여전히 각 디렉토리에 다른 수의 파일이 있습니다. 이를 자동화 (규칙 포함)하는 것은 몇 번하는 것보다 더 많은 노력입니다.
Daniel Beck

답변:


25

파일을 수동으로 이동 해야하는 것보다 항상 정확히 21 개의 파일이 아니라고 말했기 때문에 효과적으로 확장 괄호를 사용할 수 있습니다 .

mv filename{001..21} dir1
mv filename{022..53} dir2
...

이것은 효과가있는 것 같습니다. 사용해 보겠습니다.
Rob

1
대괄호 뒤에 와일드 카드를 추가하면 완벽하게 작동합니다. 이것이 바로 내가 필요한 것입니다.
Rob

2
숫자가 이름 중간에 있으면을 쓸 수 file{001..21}name있으며 와일드 카드를 사용할 필요가 없습니다. 어쨌든, 당신을 위해 일한 것이 행복합니다.
drrlvn

1

이렇게하면 설명대로 파일이 이동합니다 (두 번째 범위는 두 번째 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

항상 21 개의 파일은 아니지만 감사합니다.
Rob

0

내 말은 {1..20}을 사용하면 많은 파일 (예 : 10 만 또는 백만 개)을 옮기는 것입니다. 쉘은 파일 목록에 대해 너무 오래 불평합니다.

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를 사용하지 않는 경우 /unix/128559/solving-mv-argument-list-too-long참조하십시오.


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다. "더 자세한 답변"이라고 말하는 답변은 무엇입니까?
Ramhound

OP가 다른 파일을 다른 디렉토리로 옮기기를 원하기 때문에 이것은 실제로 질문에 대답하지 않습니다.
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.