如何通过在文件开头添加公共字符串来重命名多个文件?

如何通过在文件开头添加公共字符串来重命名多个文件?

我有 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

所以这附加了一个字首到文件名。

相关内容