다음 파일이 포함된 디렉터리가 있다고 가정해 보겠습니다.
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.txt
and 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>
.