2014-10-31 1 views
1

거대한 이미지 폴더에있는 파일의 이름을 변경하려고합니다. 많은 하위 폴더가 포함되어 있으며 이미지 내에 있습니다. 이 같은하위 폴더로 이미지 컬렉션의 이름을 재 지정

뭔가 : 지금은 때까지

ImageCollection/ 
    January/ 
     Movies/ 
     0.jpg 
     1.jpg 
     Landscapes/ 
     2.jpg 
    February/ 
     Movies/ 
     3.jpg 
     4.jpg 
    Landscapes/ 
     5.jpg 

:

ImageCollection/ 
    January/ 
     Movies/ 
     123123.jpg 
     asd.jpg 
     Landscapes/ 
     qweqas.jpg 
    February/ 
     Movies/ 
     ABC.jpg 
     QWY.jpg 
    Landscapes/ 
     t.jpg 

는 그리고 스크립트를 실행하고 오름차순으로 이름을 바꿀 수 있지만, 다음과 같이 해당 폴더에 유지하려면 다음 :

#!/usr/bin/env bash 
x=0 
for i path/to/dir/*/*.jpg; do 
    new=$(printf path/to/dir/%d ${x}) 
    mv ${i} ${new} 
let x=x+1 
done 

그러나 내 문제는 파일을 보관할 수 없다는 것에 의존합니다. es를 해당 하위 폴더에 추가하면 모든 것이 path/to/dir 루트 폴더로 이동됩니다.

+0

find 명령을 사용하여 모든 파일 목록을 가져옵니다. (yourmainfolder | grep "\ .jpg $"를 찾으십시오) 목록이 표시됩니다. 루프 (카운터가 0부터 시작)를 사용하고 shenzi (mv $ {file} $ (dirname $ {file})/$ counter.jpg)를 시작하십시오. for 루프의 마지막 줄은 ((counter ++)). 거기에 –

답변

1

(물론 mv에서 제외) 순수 배쉬 솔루션 :

#!/bin/bash 

shopt -s nullglob 

### Optional: if you also want the .JPG (uppercase) files 
# shopt -s nocaseglob 

i=1 
for file in ImageCollection/*/*.jpg; do 
    dirname=${file%/*} 
    newfile=$dirname/$i.jpg 
    echo mv "$file" "$newfile" && ((++i)) 
done 

이 이름 변경을 수행하지 않습니다 만 무슨 일이 일어날 보여줍니다. 결과에 만족하면 echo을 제거하십시오.

기존 파일을 덮어 쓰지 않으려면 -n 옵션을 mv에도 사용할 수 있습니다. (나는이 경우 확실히 사용하겠다!). -n를 사용할 수없는 경우, 당신은 사용할 수 있습니다 :

[[ ! -e $newfile ]] && mv "$file" "$newfile" && ((++i)) 

이 파일 이름 (또는 dirnames)를 포함 공백이나 다른 재미 문자에 대한 100 % 안전합니다.

0
#!/bin/bash 

x=0 
for f in `find path_to_main_dir_or_top_folder | grep "\.jpg$"`; 
do 
    mv $f $(dirname $f)/$x.jpg && ((x++)) 
done 
echo shenzi 
  1. $ f를 주어진 $ f를 파일 (파일 이름 제외)
  2. dirname이 명령은 당신에게 채우기 경로를 제공하는 모든 * .JPG 파일에 대한 전체 경로로 모든 파일을 개최한다.
  3. $ x.jpg이 트릭을 수행합니다. 루프에서 반복 당 $ x 값이 증가합니다.
+0

만약 당신이 가장 깊은 수준으로 재귀를 수행하는 명령을 찾으려면 - maxdepth N 여기서 N은 숫자입니다 (ex : -maxdepth 3 * .jpg를 현재, 아래로, 아래로, 3 번째 레벨 폴더까지만 찾으십시오.). –

+0

그 덕분에 꽤 잘했습니다. – JohD

+0

@ JohD 그게 ... 공백이나 다른 재미있는 기호로 파일 이름을 때까지. 행운을 빕니다. –

관련 문제