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
그래서 이것은접두사파일 이름에.