Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 按顺序批重命名文件_Shell_Rename - Fatal编程技术网

Shell 按顺序批重命名文件

Shell 按顺序批重命名文件,shell,rename,Shell,Rename,在shell中重命名图像序列时遇到问题 我有大约300个文件遵循myimage_001.jpg的模式,我想将其转换为myimage.0001.jpg,其中数字随着每个文件的增加而增加 这是我尝试过的,但没有成功(在实际应用之前,-n标志用于显示结果): 对我来说行吗?但是请注意,这并没有像您的问题中那样添加额外的前导零,这是打字错误吗 $ find . ./myimage_001.jpg ./myimage_007.jpg ./myimage_006.jpg ./myimage_002.jpg

在shell中重命名图像序列时遇到问题

我有大约300个文件遵循
myimage_001.jpg
的模式,我想将其转换为
myimage.0001.jpg
,其中数字随着每个文件的增加而增加

这是我尝试过的,但没有成功(在实际应用之前,
-n
标志用于显示结果):


对我来说行吗?但是请注意,这并没有像您的问题中那样添加额外的前导零,这是打字错误吗

$ find
.
./myimage_001.jpg
./myimage_007.jpg
./myimage_006.jpg
./myimage_002.jpg
./myimage_004.jpg
./myimage_009.jpg
./myimage_008.jpg
./myimage_003.jpg
./myimage_005.jpg

$ rename -n 's/_/./g' *.jpg
myimage_001.jpg renamed as myimage.001.jpg
myimage_002.jpg renamed as myimage.002.jpg
myimage_003.jpg renamed as myimage.003.jpg
myimage_004.jpg renamed as myimage.004.jpg
myimage_005.jpg renamed as myimage.005.jpg
myimage_006.jpg renamed as myimage.006.jpg
myimage_007.jpg renamed as myimage.007.jpg
myimage_008.jpg renamed as myimage.008.jpg
myimage_009.jpg renamed as myimage.009.jpg

$ rename 's/_/./g' *.jpg
$ find
.
./myimage.008.jpg
./myimage.007.jpg
./myimage.001.jpg
./myimage.003.jpg
./myimage.006.jpg
./myimage.005.jpg
./myimage.002.jpg
./myimage.009.jpg
./myimage.004.jpg

对我来说行吗?但是请注意,这并没有像您的问题中那样添加额外的前导零,这是打字错误吗

$ find
.
./myimage_001.jpg
./myimage_007.jpg
./myimage_006.jpg
./myimage_002.jpg
./myimage_004.jpg
./myimage_009.jpg
./myimage_008.jpg
./myimage_003.jpg
./myimage_005.jpg

$ rename -n 's/_/./g' *.jpg
myimage_001.jpg renamed as myimage.001.jpg
myimage_002.jpg renamed as myimage.002.jpg
myimage_003.jpg renamed as myimage.003.jpg
myimage_004.jpg renamed as myimage.004.jpg
myimage_005.jpg renamed as myimage.005.jpg
myimage_006.jpg renamed as myimage.006.jpg
myimage_007.jpg renamed as myimage.007.jpg
myimage_008.jpg renamed as myimage.008.jpg
myimage_009.jpg renamed as myimage.009.jpg

$ rename 's/_/./g' *.jpg
$ find
.
./myimage.008.jpg
./myimage.007.jpg
./myimage.001.jpg
./myimage.003.jpg
./myimage.006.jpg
./myimage.005.jpg
./myimage.002.jpg
./myimage.009.jpg
./myimage.004.jpg

您可以尝试以下方法:

for file in *.jpg; do 
    name="${file%_*}" 
    num="${file#*_}"
    num="${num%.*}"
    ext="${file#*.}"
    mv "$file" "$(printf "%s.%04d.%s" $name $num $ext)"
done
这使得:

$ ls
myimage_001.jpg  myimage_002.jpg

您可以尝试以下方法:

for file in *.jpg; do 
    name="${file%_*}" 
    num="${file#*_}"
    num="${num%.*}"
    ext="${file#*.}"
    mv "$file" "$(printf "%s.%04d.%s" $name $num $ext)"
done
这使得:

$ ls
myimage_001.jpg  myimage_002.jpg

试试这个命令:

rename _ . *.jpg
> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ .0 *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.0001.jpg
示例:

> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ . *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.001.jpg
rename 'old' 'new' 'data-source'
带有额外的0:

rename _ . *.jpg
> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ .0 *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.0001.jpg
语法很简单:

> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ . *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.001.jpg
rename 'old' 'new' 'data-source'

试试这个命令:

rename _ . *.jpg
> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ .0 *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.0001.jpg
示例:

> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ . *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.001.jpg
rename 'old' 'new' 'data-source'
带有额外的0:

rename _ . *.jpg
> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ .0 *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.0001.jpg
语法很简单:

> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage_001.jpg
> rename  _ . *.jpg
> ll
-rw-r--r-- 1 oracle oinstall      0 Mar 17 10:55 myimage.001.jpg
rename 'old' 'new' 'data-source'
另一种选择:

$ touch a.txt  b.txt  c.txt  d.txt  e.txt  f.txt
$ ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt
我们可以使用
ls
sed
+
xargs
来实现您的目标

$ ls | sed -e "p;s/\.txt$/\.sql/"|xargs -n2 mv

$ ls
a.sql  b.sql  c.sql  d.sql  e.sql  f.sql
有关详细信息,请参见。

另一种选择:

$ touch a.txt  b.txt  c.txt  d.txt  e.txt  f.txt
$ ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt
我们可以使用
ls
sed
+
xargs
来实现您的目标

$ ls | sed -e "p;s/\.txt$/\.sql/"|xargs -n2 mv

$ ls
a.sql  b.sql  c.sql  d.sql  e.sql  f.sql


有关详细信息,请参阅。

运行此操作时发生了什么?此操作在哪个系统上?我的系统没有
重命名
。什么也没有发生。我想我的系统也没有。我在发布前搜索时发现该命令处于打开状态。我运行Linux SL6。当你运行这个时发生了什么?这是在什么系统上?我的系统没有
重命名
。什么也没有发生。我想我的系统也没有。我在发布前搜索时发现该命令处于打开状态。我运行Linux SL6。这不适用于OP使用的重命名的
perl
实现。@AdrianFrühwirth-可以解释原因吗?-这对我一直有效!我不知道为什么,但这个事件起作用了,尽管它没有,而且是0。这不是问题,我可以使用myimage.jpg文件。非常感谢。有没有办法添加0?让最终文件为myimage.0001.jpg而不是myimage.001.jpg?不幸的是,我对shell不够熟悉,无法想象;)不过还是行的,谢谢!这不适用于OP使用的重命名的
perl
实现。@AdrianFrühwirth-可以解释为什么吗?-这对我一直有效!我不知道为什么,但这个事件起作用了,尽管它没有,而且是0。这不是问题,我可以使用myimage.jpg文件。非常感谢。有没有办法添加0?让最终文件为myimage.0001.jpg而不是myimage.001.jpg?不幸的是,我对shell不够熟悉,无法想象;)不过还是行的,谢谢!尽管我在这篇文章中找到了一个解决方案,但我还是很想尝试一下。我将如何更改命令以使我的最终文件为:myimage.#####.jpg?@titatom我没有遵循。此命令将把
myimage_001.jpg
重命名为
myimage.0001.jpg
您还需要什么吗?尽管我在这篇文章中找到了一个解决方案,但我还是很想尝试一下。我将如何更改命令以使我的最终文件为:myimage.#####.jpg?@titatom我没有遵循。此命令将把
myimage_001.jpg
重命名为
myimage.0001.jpg
您还需要什么吗?