한때 다음을 수행하는 스크립트가 있었습니다. 현재 디렉터리에 있는 여러 파일의 파일 이름 중 일부 이름이 변경됩니다.
예를 들어:
rename variable1 variable2
rename 456 555
입력하다:
testa456testa
sama456sama
apple456applea
johna_456_johna
davida_456_davidb
산출:
testa555testa
sama555sama
apple555applea
johna_555_johna
davida_555_davidb
나는 더 이상 스크립트가 없으며 Unix를 처음 접했습니다. 명령줄에서 사용할 수 있는 스크립트가 필요합니다.
내가 지금 하고 있는 일은:
임시 파일 이름으로 나열된 "ls *(filename)" 파일이 있습니다. 그런 다음 %/s/456/555/g를 검색합니다. 그런 다음 이전 파일 이름을 모두 새 파일 이름으로 옮겼습니다. "$1을 $2로 이름 바꾸기" 명령줄에서 이 작업을 수행할 수 있습니다. 따라서 특정 디렉토리에서 명령줄에서 파일 이름의 중간 부분의 이름을 바꿉니다. 수백 개의 파일이 있을 수 있습니다. 이해가 되셨기를 바랍니다. Ivan에게 감사드립니다.
답변1
쉘을 사용하여 매개변수 확장을 사용하십시오.
for f in *456*; do echo mv -i -- "$f" "${f//456/555}"; done
여기서는 이름에 포함된 파일을 다시 반복하고 456
매개변수 확장 모드에서는 ${f//456/555}
를 456
사용합니다 555
.
mv
위의 명령은 실행될 명령을 표시하여 테스트 실행되며, echo
작업이 발생하도록 제거할 수 있습니다.
for f in *456*; do mv -i -- "$f" "${f//456/555}"; done
그리고 rename
( prename
):
rename -n 's/456/555/g' *456*
그러면 파일 이름의 모든 ( g
) 456
하위 문자열이 555
( s/456/555/
)로 대체됩니다.
-n
시험 실행이 이루어지며 변경 사항이 만족스러우면 제거하여 -n
실제 이름 바꾸기를 수행하세요.
rename 's/456/555/g' *456*
답변2
파일을 에 전달하는 것을 잊어버린 것 같습니다 rename
.
rename 456 555 *456*
답변3
답변4
(에서 이동됨질문여기에 대한 답변으로 사용됨)
내 질문에 대한 답을 찾았습니다.
#! /bin/csh -f
#----------------------------------------------------------------------
# Script Name: moveme Date: 05/07/96
# Written by: John W. Woolsey Rev: 10/11/99
#
# Description:
# Renames a set of files that contain a particular search string
# to file names that contain a replacement string.
#
# Syntax: moveme <search_string> <replace_string>
#
# Where:
# <search_string> is the name of the file name search string.
# <replace_string> is the name of the file name replace string.
#----------------------------------------------------------------------
#
onintr catch
if ($#argv != 2) goto syntax
ls -d *$1* | sed "s/\(.*\)\$1\(.*\)/mv & \1$2\2/" | sh
exit 0
syntax:
echo "Syntax: `basename $0` <search_string> <replace_string>"
exit 1
catch:
echo "`basename $0` was interrupted or terminated abnormally."
exit 1