파일 시작 부분에 공통 문자열을 추가하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

파일 시작 부분에 공통 문자열을 추가하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

100개의 파일이 있습니다. 모든 파일 이름 앞에 "new"라는 텍스트를 추가하고 싶습니다.

도와주세요. 미리 감사드립니다.

예:

파일1.txt ---> 새_파일1.txt
.
.
.
.
파일100.txt ---> 새_파일100.txt

여러 파일의 이름을 바꾸는 솔루션을 제공하십시오. 내가 시도한 것은 다음과 같습니다. 그러나 이것이 더 나은 해결책은 아닙니다.

 
bala@SMS:~/test1$ ls -l
합계 0
-rw-rw-r-- 1 bala bala0 8월 31일 19:10 file1.txt
-rw-rw-r-- 1 bala bala0 8월 31일 19:10 file2.txt
-rw-rw-r-- 1 bala bala0 8월 31일 19:10 file3.txt
bala@SMS:~/test1$ mv file1.txt new_file1.txt
bala@SMS:~/test1$ mv file2.txt new_file2.txt
bala@SMS:~/test1$ mv file3.txt new_file3.txt
bala@SMS:~/test1$ ls
새 파일 1.txt 새 파일 2.txt 새 파일 3.txt
bala@SMS:~/test1$

답변1

여러 파일의 파일 이름을 변경하려면 루프를 사용해야 합니다.

for file in *
do
    mv -v ${file} new_${file}
done

동일한 코드 줄:

for file in *; do mv -v ${file} new_${file}; done

답변2

$ find . -type f -name "file*.txt" -execdir mv {} new_{} \;

현재 디렉터리(또는 그 아래)에서 이름이 패턴과 일치하는 모든 일반 파일을 찾고 file*.txt이름에 접두사를 추가하여 이러한 파일의 이름을 바꿉니다.new_

이를 find이해하는 사람이 필요합니다 -execdir(대부분의 최신 find구현에서는 그렇습니다). 이 -execdir옵션은 유사하게 작동하지만 -exec발견된 콘텐츠의 디렉터리에서 유틸리티( )를 실행합니다. mv또한, {}발견된 사물의 기본 이름도 포함됩니다.

현재 디렉터리로 제한오직-maxdepth 1, 이전 어딘가에 추가되었습니다 -execdir.


bash-4.4$ mkdir dir{1..10}
bash-4.4$ touch dir{1..10}/file{1..10}.txt

bash-4.4$ ls
dir1  dir10 dir2  dir3  dir4  dir5  dir6  dir7  dir8  dir9

bash-4.4$ ls dir5
file1.txt   file2.txt   file4.txt   file6.txt   file8.txt
file10.txt  file3.txt   file5.txt   file7.txt   file9.txt

bash-4.4$ find . -name "file*.txt" -execdir mv {} new_{} \;

bash-4.4$ ls dir5
new_file1.txt    new_file2.txt    new_file4.txt    new_file6.txt    new_file8.txt
new_file10.txt   new_file3.txt    new_file5.txt    new_file7.txt    new_file9.txt

답변3

이름 바꾸기 명령을 사용하여 시스템에 이미 설치되어 있는지 확인하거나 운영 체제 패키지 관리자를 사용하여 설치할 수 있습니다.

[root@archy pippo]# rename -h

Usage:
 rename [options] <expression> <replacement> <file>...

Rename files.

Options:
 -v, --verbose    explain what is being done
 -s, --symlink    act on the target of symlinks

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see rename(1).

귀하의 경우에는 이 간단한 교체를 수행해야 합니다.

[root@archy pippo]# ls -lrta
total 8
drwxr-x--- 6 root root 4096 Aug 31 14:12 ..
-rw-r--r-- 1 root root    0 Aug 31 14:12 file1.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 file2.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 file3.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 file4.txt
drwxr-xr-x 2 root root 4096 Aug 31 14:24 .
[root@archy pippo]# rename -v file new_file *.txt
`file1.txt' -> `new_file1.txt'
`file2.txt' -> `new_file2.txt'
`file3.txt' -> `new_file3.txt'
`file4.txt' -> `new_file4.txt'
[root@archy pippo]# ls -lrta
total 8
drwxr-x--- 6 root root 4096 Aug 31 14:12 ..
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file1.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file2.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file3.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file4.txt
drwxr-xr-x 2 root root 4096 Aug 31 14:27 .
[root@archy pippo]#

바라보다 :)

답변4

mv그리고 사용지원 확장루프 내에서.

for N in {1..100}; do
     mv {,new_}file$N.txt
done

명령을 실행하기 전에 mv쉘은 명령을 각 파일에 대한 명령으로 확장하고 $N해당 시퀀스 번호가 대체됩니다.

mv file$N.txt new_file$N.txt

그래서 이것은접두사파일 이름에.

관련 정보