이것은 내 현재 코드입니다.
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
. . - 그것이 존재하고 디렉토리라면 좋습니다. 해당 디렉토리에 재귀적으로 씁니다.
- 존재하고 파일인 경우 아직 존재하지 않는 것을 찾을 때까지 새로운 숫자 접미사를 시도하십시오.