특정 깊이에서 특정 디렉터리 이동

특정 깊이에서 특정 디렉터리 이동

폴더에서 특정 하위 폴더를 이동하는 데 도움이 되는 bash 스크립트를 만들려고 합니다.
문제는 기본 폴더에 , , , , , , , 와 photos같은 이름의 폴더가 있다는 것입니다. 여기서 폴더 이름이 반복되고 동일한 폴더 구조가 다시 반복됩니다. 이동하려는 하위 폴더는 이름에 문자가 포함된 마지막 폴더에 있습니다. 이동하려는 하위 폴더의 이름에 2자 이상의 문자가 포함되어 있습니다. 폴더 구조는 /// subdir 대상 폴더가 지정되지 않았으므로 가정합니다 .12345678900-90-90-9desktop/photos1

예:photos/0/0/0/23345 photos/1/9/0/12578

예를 들어 두 하위 디렉터리의 이름이 같은 경우 photos/0/0/0/23345photos/1/1/1/23345중 하나의 이름을 바꾸고 싶습니다. 나는 OSX를 사용하고 있다

답변1

  • GNU coreutils가 있는 시스템(따라서 OSX의 기본 설치가 아님)에서는 다음을 사용할 수 있습니다.

    mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/
    

    이것이 움직일 것이다모두photos/깊이 1, 2, 3의 디렉터리 이름에 관계없이 깊이 4의 하위 디렉터리를 삭제합니다 .

    이 접근 방식의 장점은 필요할 때만 이름을 바꾸는 것입니다( 12578예를 들어 in 에 하위 폴더가 하나만 있는 경우 photos/1/9/0/이름이 바뀌지 않습니다).

  • GNU coreutils가 없으면 모든 하위 폴더의 이름을 바꾸는 이(다소 복잡한) 스크립트를 사용할 수 있습니다. 예를 들어 다음과 photos/1/9/0/12578같이 이름이 변경됩니다 12578-190.

    target=/some/path
    for i in {0..9}; do
      for j in {0..9}; do
        for k in {0..9}; do
          for dir in "photos/$i/$j/$k/*/"; do
            mv -- "$dir" "$target/$(basename $dir)-$i$j$k"
          done
        done
      done
    done
    

관련 정보