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工具的选择也非常有限。不过,感谢您提供了一个简洁的解决方案!