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


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.