동일한 디렉터리에 파일 복사본을 만듭니다.

동일한 디렉터리에 파일 복사본을 만듭니다.

다음 파일이 포함된 디렉터리가 있다고 가정해 보겠습니다.

1.txt 2.txt 3.txt

나는 이것을 복사하여 기본적으로 동일한 디렉토리에 붙여넣고 다음과 같은 새 파일을 만들고 싶습니다.

1.txt 1(1).txt 2.txt 2(1).txt 3.txt 3(1).txt

이거 생각보다 어렵네요! 이것은 Windows에서는 간단해 보입니다. 여러 파일을 강조 표시하고 복사/붙여넣기하면 동일한 파일이 생성되지만 이름에 "복사"가 추가됩니다.

답변1

일반 Unix 스타일에서는 파일을 반복해야 합니다.

for file in 1.txt 2.txt 3.txt; do cp -pi "$file" "${file%.*}(1).txt"; done

${file%.*}파일 이름에서 확장자를 제거한 다음 (1).txt번호를 추가하고 확장자를 복원하십시오. cp대상이 이미 존재하는 경우 메시지를 표시하고( ) 권한을 유지 하는 -i옵션 ( )입니다 -p.

이 패키지는 대부분의 Linux 시스템에서 제공됩니다 mmv. 이를 통해 간단히 수행할 수 있습니다.

mcp '*.txt' '#1(1).txt'

.txt이렇게 하면 로 끝나는 각 파일이 새 파일에 복사되고 첫 번째 와일드카드( #1)와 일치하며 (1).txt괄호는 따옴표 안에 있으므로 여기에서 이스케이프할 필요가 없습니다.

또는 그래픽 파일 관리자를 사용하면 Windows에서와 똑같은 작업을 수행할 수 있습니다.

답변2

이것은 Windows에서는 사소한 것처럼 보입니다. 단지 여러 파일을 강조 표시하면 됩니다.

나는 이것이 Linux의 다양한 GUI 파일 관리자들 사이에서도 사소한 일이라고 생각하지만 쉘 솔루션이 필요합니다. 그렇죠? 여기있어:

for F in *; do cp -p "$F" "${F%.*}\(1\).${F#*.}"; done

${F%.*}파일명 중간 앞 부분을 추출하고, ${F#*.}확장자도 추출합니다.

답변3

set ./*.txt
while    [ -e "$1" ] || [ -L "$1" ]
do       case ${1##*(} in ($1|*[!0-9]*\)|\)*)
         cp "$1" "${1%.*}(1).txt";;
         (*\)*) set "${1##*(}" "$@"; cp \
         "$2" "${2%"$1"}$((${1%)*}+1))).txt"
         shift;; esac
shift;   done

나는 이것이 모든 상황을 잘 처리해야한다고 생각합니다. 그것은 증가할 것이다(복사)필요한 경우 번호 - 그렇지 않으면 하나만 삽입됩니다.(1)확장자와 파일 이름 사이에 위치합니다.

답변4

에서는 zsh와일드카드 이동 또는 복사가 셸과 함께 제공됩니다.

autoload zmv
zmv -C '(*).txt' '$1 (1).txt'

하지만 이 목적으로 파일 이름에 공백을 사용하지 말 것을 권장하며 괄호도 이상적이지 않습니다. 이와 같은 패턴(예: x.txtand x (1).txt및 ) 을 발견하고 큰따옴표 없이 탭 완성을 원할 때마다 올바르게 x (2).txt작성해야 하기 때문에 이것을 언급합니다. x <tab> <backslash> <space> <backslash> ( 1 <tab>또한 ls파일 이름이 끝나는 위치가 명확하지 않기 때문에 출력에서 ​​혼란스러워 보입니다. 나는 x.txt, x.1.txt및 를 사용합니다 x.2.txt. 이렇게 하면 파일 이름이 시각적으로 단일 단위로 나타나며 다음 완성이 제대로 작동합니다 x <tab> .1 <tab>.

관련 정보