이동할 때 같은 이름으로 파일 이름 바꾸기

이동할 때 같은 이름으로 파일 이름 바꾸기

이것은 내 현재 코드입니다.

Base_DIR=/file/path
other= /folder/path
find "Base_DIR" -type f -name "*.txt"
while IFS= read -r file; do
year="$(date -d "$(stat -c %y "$file")" +%Y
month="$(date -d "$(stat -c %y "$file")" +%m
day="$(date -d "$(stat -c %y "$file")" +%d

[[ ! -d "$other/$year/$month/$day" ]] && mkdir -p "$other/$year/$month/$day";

mv "$file" "$other/$year/$month/$day`

따라서 기본적으로 다른 하위 디렉터리에서 파일을 찾고 파일이 마지막으로 수정된 연도, 월, 일을 기준으로 폴더를 생성하면서 파일을 다른 폴더로 이동합니다.

내 질문은 동일한 이름을 가진 파일을 이동할 때 자동으로 파일 이름을 file(1).txt로 바꾸도록 이것을 추가하는 방법입니다. 이제 코드는 둘 다 대신 파일 중 하나만 복사합니다.

감사해요.

답변1

그리고

mv --backup=t file directory/

file, file.~1~, file.~2~ 등의 이름을 가진 파일을 가져와야 합니다.

답변2

귀하의 질문에 있는 코드가 전혀 작동하지 않더라도 "숫자 접미사를 추가하여 파일을 손실 없이 이동하는 방법"이라는 질문을 해결하려면 다음과 유사한 코드가 작동할 수 있습니다.

$ cat mvr.sh
#!/usr/bin/env bash

bail() {
   retcode=$1
   shift
   printf "%s" "$*" 1>&2
   exit "$retcode"
}

[[ -f "$1" ]] || bail 1 "File '$1' not found"

if ! [[ -f "$2" ]]; then
   mv "$1" "$2"
else
   if [[ -d "$2" ]]; then
      $0 "$1" "${2}/${1}"
      exit $?
   else
      suffix=1
      until ! [[ -f "${2}.$suffix" ]]; do
         suffix=$((suffix+1))
      done
      mv "$1" "${2}.$suffix"
   fi
fi

실행 중:

$ ls
bar    bar.1  bar.2  mvr.sh
$ touch foo; ls
bar    bar.1  bar.2  foo    mvr.sh
$ ./mvr.sh foo bar
$ ls
bar    bar.1  bar.2  bar.3  mvr.sh

이를 수행하는 방법의 실제 핵심은 if명령문에서 시작됩니다.

  • 대상 파일 이름이 아직 존재하지 않는다면 괜찮습니다 mv. .
  • 그것이 존재하고 디렉토리라면 좋습니다. 해당 디렉토리에 재귀적으로 씁니다.
  • 존재하고 파일인 경우 아직 존재하지 않는 것을 찾을 때까지 새로운 숫자 접미사를 시도하십시오.

관련 정보