일부 파일의 이름을 바꾸려면 루프를 사용해야 하지만 Linux를 처음 접하기 때문에 작동하도록 할 수 없습니다. 이름을 바꿔야 하는 파일은 다음과 같습니다.
E9-GOWN33_multiplemap.bin.10.fa
E9-GOWN33_multiplemap.bin.16.fa
E9-GOWN33_multiplemap.bin.21.fa
E9-GOWN33_multiplemap.bin.7.fa
다음과 같은 짧은 이름:
E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa
rename
스레드에서 본 및 다른 루프를 사용했지만 mv
여전히 작동하지 않습니다. 어떤 의견이라도 대단히 감사하겠습니다! 감사합니다!
답변1
rename
Perl (Ubuntu, Debian 및 기타 여러 시스템의 기본값)이 있으면 다음을 수행할 수 있습니다.
rename -n 's/-GOWN33_multiplemap//' ./*fa
올바른 파일 이름이 제공되면 -n
실제로 이름을 바꾸지 않고 실행하십시오.
rename 's/-GOWN33_multiplemap//' ./*fa
답변2
다음을 시도해 볼 수 있습니다.
for f in *.fa; do
echo mv -- "$f" "${f%-*}.${f#*.}"
done
결과:
E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa
답변3
이 모든 파일이 현재 디렉터리에 있고 이 모든 파일(다른 파일은 제외)이 와일드카드 패턴과 일치한다고 가정합니다.
E9-GOWN33_multiplemap.bin.*.fa
그런 다음 다음을 반복할 수 있습니다.
for name in E9-GOWN33_multiplemap.bin.*.fa; do
# more code here
done
루프 내부에는 $name
이러한 파일 중 하나의 이름이 있습니다.
E9-GOWN33_multiplemap.bin.10.fa
이름이 주어지면 다음을 사용하여 이름의 시작 부분에서 비트를 제거 $name
할 수 있습니다.E9-GOWN33_multiplemap
${name#E9-GOWN33_multiplemap}
E9
그런 다음 생성하려는 문자열 앞에 초기 문자열을 다시 추가하면 됩니다 E9.bin.10.fa
.
newname=E9${name#E9-GOWN33_multiplemap}
그런 다음 mv
이전 파일 이름을 새 파일 이름으로 바꿀 수 있습니다.
mv "$name" "$newname"
그래서 우리는 이 방법으로
for name in E9-GOWN33_multiplemap.bin.*.fa; do
newname=E9${name#E9-GOWN33_multiplemap}
mv "$name" "$newname"
done
또는 더 짧거나,
for name in E9-GOWN33_multiplemap.bin.*.fa; do
mv "$name" "E9${name#E9-GOWN33_multiplemap}"
done
답변4
for f in *.fa; do mv -- "$f" "${f/-*p./.}"; done
- 입력하다:
E9-GOWN33_multiplemap.bin.7.fa E9-GOWN33_multiplemap.bin.10.fa E9-GOWN33_multiplemap.bin.16.fa E9-GOWN33_multiplemap.bin.21.fa
- 산출:
E9.bin.7.fa E9.bin.10.fa E9.bin.16.fa E9.bin.21.fa
다음 스크립트를 사용할 수도 있습니다.
#!/bin/bash
# Set the directory path where the files are located
directory="/path/to/files"
# Loop through the files in the directory
for file in "$directory"/E9-GOWN33_multiplemap.bin.*.fa; do
# Extract the original filename
filename=$(basename "$file")
# Extract the numeric part from the original filename
number=$(echo "$filename" | awk -F'.' '{ print $3 }')
# Create the new filename
new_filename="E9.bin.$number.fa"
# Rename the file
mv "$file" "$directory/$new_filename"
done
이 스크립트에서 for 루프는 E9-GOWN33_multiplemap.bin.*.fa 패턴과 일치하는 지정된 디렉터리의 파일을 반복합니다. 루프 내에서 기본 이름을 사용하여 원본 파일 이름을 추출합니다. 그런 다음 awk를 사용하여 숫자 부분을 추출합니다. 마지막으로 고정된 부분(E9.bin.)과 추출된 번호를 결합하여 새로운 파일명이 생성됩니다. mv 명령은 파일 이름을 새 파일 이름으로 바꾸는 데 사용됩니다.