태그 보관물: file-copy

file-copy

이름을 바꾸어 파일 복사 파일을 바꿀 것인지

거대한 파일 트리가 있습니다. 일부 파일의 이름은 동일하지만 경우가 다릅니다 (예 : some_code.c및) Some_Code.c.

따라서 NTFS / FAT 파일 시스템에 파일을 복사하려고 할 때 파일을 바꿀 것인지 건너 뛸 것인지 묻습니다.

예를 들어  (1)(Windows 7처럼) 충돌 파일 이름 에 추가 하여 이러한 파일의 이름을 자동으로 바꾸는 방법이 있습니까?



답변

많은 GNU의 같은 도구 cp, mv그리고 tar타겟이 존재하는 경우 백업 파일을 생성을 지원합니다. 즉 복사 할 때, foobar이미라는 파일이있는 경우, bar기존은 bar 이름이 변경되며, 복사 이후 bar의 내용을 포함합니다 foo. 기본적 bar으로 이름은으로 바뀌지 bar~만 동작을 수정할 수 있습니다.

                                # If a file foo exists in the target, then…
cp -r --backup source target    #   rename foo → foo~
cp -r --backup=t source target  #   rename foo → foo.~1~ (or foo.~2~, etc)

번호가 지정된 백업이 이미 존재하는 경우에만 백업과 같은 다른 변형이 있습니다. 자세한 내용은 coreutils 설명서 를 참조하십시오.


답변

나는 시도했다

apropos copy | grep "(1)"

가능한 후보를 찾고 mcopy가 나타났습니다.

man mcopy

유망한 옵션 -D clash-option이 멋지지 않습니까? 그러나 그렇게 시원하지는 않습니다-설명되지 않았습니다. 하지만 성공하지 않고, 내 시스템에 검색 mtools.dvi에 대한 몇 가지 힌트가있다, 그리고 구글을 통해 성공을하지 않고 있지만, 다음, 구글과 함께, 내가 직접 검색 mcopy clash-option하고 이 사이트를 발견 .

나는 짧은 테스트를했다

mcopy -D A f* a

autorename과 targetdir을 테스트하기 위해 a-자동 이름 바꾸기 대신 모든 파일을 무시하거나 무시하도록 요청했습니다.

내 버전은 mtools-4.0.10도움말 페이지는 1996-15 세입니다. 그 동안 우리는 실제로 일부 기능을 잃어야합니까?

작업을 두 단계로 나누었습니다.

  • 해당 이름을 사용하는 경우 파일의 고유 이름을 생성하는 짧은 기능을 만드십시오.
  • 를 실행 find하고 복사하려는 모든 파일에 대해 해당 스크립트를 실행 하십시오 .

이 접근법을 도와 줄까요? 🙂

다음은 파일을 자동으로 바꾸는 스크립트입니다.

#!/bin/bash

name=$1
target=$2

autorename () {
name=$1
target=$2
no=$3

test -e ${target}/${name}.$no && autorename ${name} ${target} $((no+1)) || cp ${name} ${target}/${name}.$no

}

test -e ${target}/${name} && autorename ${name} ${target} 0 || cp ${name} ${target}

그리고 이것은 내 테스트 호출입니다.

find -maxdepth 1 -name "fo*" -type f -exec ./autorename.sh {} /mnt/hidden/test/a ";"

참고 : 영향을받는 파일 수를 극적으로 제한하는 데 사용되는 -maxdepth, -name 및 -type 더 깊은 파일 구조 나 줄 바꿈, 페이지 피드 등과 같은 다른 펑키 문자의 공백이나 파일 구조에 대해 스크립트를 테스트하지 않았습니다.

나는 대부분의 명령에서 문제를 일으키지 않기 때문에 .1을 사용했지만 (및 a)는 종종 마스킹이 필요합니다.


답변

cp적어도 GNU 에서는 아닙니다 .

중복 된 파일 이름 (대소 문자 무시)을 사용하지 말 것을 강력히 권장합니다. 다음을 사용하여 이러한 중복 목록을 찾으십시오.

find . | tr A-Z a-z | sort | uniq -d

그런 다음 출력 할 경우 각 줄의 파일 중 하나의 이름을 수동으로 바꿉니다. 나중에 중복을 만들지 않도록하십시오.


답변