폴더에서 특정 하위 폴더를 이동하는 데 도움이 되는 bash 스크립트를 만들려고 합니다.
문제는 기본 폴더에 , , , , , , , 와 photos
같은 이름의 폴더가 있다는 것입니다. 여기서 폴더 이름이 반복되고 동일한 폴더 구조가 다시 반복됩니다. 이동하려는 하위 폴더는 이름에 문자가 포함된 마지막 폴더에 있습니다. 이동하려는 하위 폴더의 이름에 2자 이상의 문자가 포함되어 있습니다. 폴더 구조는 /// subdir 대상 폴더가 지정되지 않았으므로 가정합니다 .1
2
3
4
5
6
7
8
9
0
0-9
0-9
0-9
desktop/photos1
예:photos/0/0/0/23345
photos/1/9/0/12578
예를 들어 두 하위 디렉터리의 이름이 같은 경우 photos/0/0/0/23345
그 photos/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