이동 명령은 하위 폴더의 모든 파일을 상위 디렉터리로 이동하고 동일한 이름의 파일이 있는 경우 이름을 바꿉니다.

이동 명령은 하위 폴더의 모든 파일을 상위 디렉터리로 이동하고 동일한 이름의 파일이 있는 경우 이름을 바꿉니다.

그래서 저는 Ubuntu 컴퓨터에 77개의 하위 폴더가 있는 디렉터리를 가지고 있습니다. 각 폴더에는 다양한 수의 토렌트 파일이 들어 있습니다. 하위 폴더에는 총 427개의 토렌트가 포함되어 있습니다. 하위 폴더에서 상위 디렉터리로 모두 이동하고 싶습니다.

이득은 무엇입니까? 일부 파일의 이름이 정확히 동일합니다. 이동 후 이름이 어떻게 바뀌었는지는 중요하지 않지만 이를 수정하는 가장 쉬운 방법은 abc.torrent ---> abc1.torrent, abc2.torrent 등(더 많은 경우)입니다.

모든 파일을 상위 디렉토리로 추출하는 다음 코드를 찾았습니다.

find . -mindepth 2 -type f -print -exec mv {} . \;

--backup을 사용하여 동일한 이름의 파일을 복구할 수 있다는 것을 알고 있습니다. 그래서 코드에 다음을 추가했습니다.

find . -mindepth 2 -type f -print -exec mv --backup=numbered {} . \;

그런데 실행해 보니 427개가 아닌 167개의 파일만 이동하게 되었습니다.

또한 -i를 사용하여 각 질문을 개별적으로 물어볼 수 있다는 것도 알고 있지만 시간이 꽤 걸립니다. 이것을 자동화할 수 있는 방법이 있나요?

답변1

제가 이해한 바에 따르면, 두 번째 발견은 작동할 것입니다. 이 발견을 파이프하면 wc -l예상대로 427이 반환됩니까?

동일한 작업을 수행하는 빠른 bash 스크립트는 다음과 같습니다.

#!/bin/bash

for torrent in $(find /path/to/target/dir -mindepth 2 -type f); do
    count=0
    # get filename and remove any spaces
    filename=$(echo $torrent | tr -d ' ' | awk -F '/' '{print $NF}')
    # if it exists in the current dir, name it $count-$filename
    while [ -f /path/to/target/dir/$filename ]; do
        ((count++))
        filename=$count-$filename
    done
    # do the move
    mv "$torrent" /path/to/target/dir/$filename
done

관련 정보