Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
RegEx移动和更改文件名_Regex_Bash - Fatal编程技术网

RegEx移动和更改文件名

RegEx移动和更改文件名,regex,bash,Regex,Bash,我正在尝试移动此目录和格式中的许多文件: /1.12.268/1.12.268_Hi_3D.jpg /1.12.0268/1.12.0268_Hi_3D.jpg 要更改此目录和格式,请执行以下操作: /1.12.268/1.12.268_Hi_3D.jpg /1.12.0268/1.12.0268_Hi_3D.jpg 我已成功运行一个RegEx,为我创建了所有新文件夹: ls 1* | find . -type d | awk '{print("mkdir "$1)}' | sed 's/[0-

我正在尝试移动此目录和格式中的许多文件:

/1.12.268/1.12.268_Hi_3D.jpg
/1.12.0268/1.12.0268_Hi_3D.jpg
要更改此目录和格式,请执行以下操作:

/1.12.268/1.12.268_Hi_3D.jpg
/1.12.0268/1.12.0268_Hi_3D.jpg
我已成功运行一个RegEx,为我创建了所有新文件夹:

ls 1* | find . -type d | awk '{print("mkdir "$1)}' | sed 's/[0-9][0-9][0-9]*/0&/2'
但是我无法确定使用哪个正则表达式来创建一个
mv
语句,该语句将所有文件移动并重命名到它们的新文件夹中

这和我来时一样接近,但文件夹被反转,文件没有被重命名

ls 1* | find . -type f | awk '{print("mv "$1" "$1)}' | sed 's/[0-9][0-9][0-9]*/0&/2'
我得到这个输出:

mv ./1.12.0269/1.12.269_Low_Tech.gif ./1.12.269/1.12.269_Low_Tech.gif
mv ./1.14.0410/1.14.410_hi_3d.jpg ./1.14.410/1.14.410_hi_3d.jpg
mv ./1.14.0410/1.14.410_hi_tech.jpg ./1.14.410/1.14.410_hi_tech.jpg
mv ./1.14.0410/1.14.410_low_3d.png ./1.14.410/1.14.410_low_3d.png
mv ./1.14.0410/1.14.410_low_tech.png ./1.14.410/1.14.410_low_tech.png
mv ./1.14.0845/1.14.845_hi_3d.jpg ./1.14.845/1.14.845_hi_3d.jpg
mv ./1.14.0845/1.14.845_hi_tech.jpg ./1.14.845/1.14.845_hi_tech.jpg
mv ./1.14.0845/1.14.845_low_3d.png ./1.14.845/1.14.845_low_3d.png
mv ./1.14.0845/1.14.845_low_tech.png ./1.14.845/1.14.845_low_tech.png
当我真的想要这个的时候:

mv ./1.12.269/1.12.269_Low_Tech.gif ./1.12.0269/1.12.0269_Low_Tech.gif
mv ./1.14.410/1.14.410_hi_3d.jpg ./1.14.0410/1.14.0410_hi_3d.jpg
mv ./1.14.410/1.14.410_hi_tech.jpg ./1.14.0410/1.14.0410_hi_tech.jpg
mv ./1.14.410/1.14.410_low_3d.png ./1.14.0410/1.14.0410_low_3d.png
mv ./1.14.410/1.14.410_low_tech.png ./1.14.0410/1.14.0410_low_tech.png
mv ./1.14.845/1.14.845_hi_3d.jpg ./1.14.0845/1.14.0845_hi_3d.jpg
mv ./1.14.845/1.14.845_hi_tech.jpg ./1.14.0845/1.14.0845_hi_tech.jpg
mv ./1.14.845/1.14.845_low_3d.png ./1.14.0845/1.14.0845_low_3d.png
mv ./1.14.845/1.14.845_low_tech.png ./1.14.0845/1.14.0845_low_tech.png

非常感谢您的帮助

是否使用
重命名
选项?它基本上是为这种东西做的


如果是这样,
rename-n's/[0-9][0-9][0-9]/0$&/g'
应该适合您。(该
-n
仅用于调试,删除它以进行实际重命名)。

我有一个肮脏的方法来完成此操作。试试看

ls 1* | find . -type f | awk '{print("mv "$1" "$1)}' | sed 's/[0-9][0-9][0-9]*/0&/6' | sed 's/[0-9][0-9][0-9]*/0&/8'

这在linux上非常有效,但我没有提到我使用的是mac,我对CLI工具的选择也非常有限。不过,感谢您提供了一个简洁的解决方案!