我有 100 个文件。我想在所有文件名之前添加文本“新”。
请帮我。提前致谢。
例子:
file1.txt ---> new_file1.txt 。 。 。 。 file100.txt ---> new_file100.txt
请提供重命名多个文件的解决方案。这是我尝试过的。但这并不是更好的解决方案。
bala@SMS:~/test1$ ls -l 总计 0 -rw-rw-r-- 1 巴拉巴拉 0 八月 31 19:10 file1.txt -rw-rw-r-- 1 巴拉巴拉 0 八月 31 19:10 file2.txt -rw-rw-r-- 1 巴拉巴拉 0 八月 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
命令之前,shell 会将其扩展为每个文件的命令,其中$N
将替换为相应的序列号。
mv file$N.txt new_file$N.txt
所以这附加了一个字首到文件名。