簡體   English   中英

在文件和文件夾的名稱中遞歸填充0

[英]Recursively padding 0's in names of files and folders

我有一個文件夾,其中包含有關某些特定主題的視頻講座。 它的結構如下:

.
├── 1_fol
│   ├── 1_file.mp4
│   ├── 2_file.mp4
│   └── 3_file.mp4
└── 2_fol
    ├── 10_file.mp4
    ├── 4_file.mp4
    ├── 5_file.mp4
    ├── 6_file.mp4
    ├── 7_file.mp4
    ├── 8_file.mp4
    └── 9_file.mp4

我想將此結構更改為

.
├── 001_fol
│   ├── 001_file.mp4
│   ├── 002_file.mp4
│   └── 003_file.mp4
└── 002_fol
    ├── 004_file.mp4
    ├── 005_file.mp4
    ├── 006_file.mp4
    ├── 007_file.mp4
    ├── 008_file.mp4
    ├── 009_file.mp4
    └── 010_file.mp4

這很有幫助,因為您可以使用find . -regextype sed -regex ".*/.*\\.\\(mp3\\|mp4\\)" -print0 | sort -z | xargs -r0 vlc find . -regextype sed -regex ".*/.*\\.\\(mp3\\|mp4\\)" -print0 | sort -z | xargs -r0 vlc find . -regextype sed -regex ".*/.*\\.\\(mp3\\|mp4\\)" -print0 | sort -z | xargs -r0 vlc打開整個播放列表。 我想出了一個腳本來填充0,但它又長又

find . -depth -exec rename -v 's/(.*)\/([0-9]$)/$1\/00$2/;
      s/(.*)\/([0-9]{2}$)/$1\/0$2/;
      s/(.*)\/([0-9][^0-9][^\/]*$)/$1\/00$2/;
      s/(.*)\/([0-9]{2}[^0-9][^\/]*$)/$1\/0$2/' '{}' ';'

是否可以進一步優化?

編輯
實際上,';'之后執行變得非常快。 已更改為“ +”。 但是正則表達式集仍然看起來很丑。

rename是一個perl工具,允許您使用任何perl表達式。 對於路徑的最后一個組件(例如下面的Perl表達式搜索ca/b/c )和焊盤其領先數(如果存在),以三位數字。

s/(^|\/)\K(\d+)(?=[^\/]*$)/sprintf "%03d",$2/e

例:

  • 1_fol/23_file.mp4變為1_fol/023_file.mp4
  • 1_fol變為001_fol
  • 1_2/3_4.mp4變成1_2/003_4.mp4
  • 1_2變成001_2

使用上面的perl表達您find命令bash ✱...

find -depth -exec rename 's/(^|\/)\K(\d+)(?=[^\/]*$)/sprintf "%03d",$2/ge' {} +

...或zsh擴展的globstar功能。 在我的系統上,問題快於find

rename 's/(^|\/)\K(\d+)(?=[^\/]*$)/sprintf "%03d",$2/ge' **/*(On)

**/*遞歸列出所有文件和目錄,並且(On)反轉順序類似於-depth

✱對於bash您仍然可以將shopt -s globstar **/* shopt -s globstar**/*一起使用,但是反轉匹配文件的順序並不是那么容易,因此find更簡單,而且可能更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM