从不同路径批量重命名多个文件

时间:2019-02-10 13:28:18

标签: bash macos batch-rename

我有一个文件目录music/artist/{random_name}/{random_music}.ogg

{random_name}中有很多文件夹,音乐标题为{random_music}

因此,我想将{random_music}.ogg重命名为music.ogg。每个{random_name}文件夹只有一个.ogg文件。

我已经尝试了Bash脚本几个小时,但没有找到答案。

for f in ../music/artist/*/*.ogg
do
  echo mv  "$f" "${f/.*.ogg/music.ogg}"
done

它仅重命名我当前目录中的文件,这将要求替换/覆盖。

我的目标是,我想用其各自的目录将所有{random_music}.ogg文件重命名为music.ogg

music/artist/arai/blue.oggmusic/artist/arai/music.ogg

music/artist/sako/sky.oggmusic/artist/sako/music.ogg

5 个答案:

答案 0 :(得分:1)

您的图案替换不正确。由于您所有的路径都以..开头,因此.*.ogg实际上与整个路径匹配,因此每个文件在您的文件中都变成了music.ogg当前目录。

您想改用${f/\/*.ogg/music.ogg},或者最好改用${f%/*}/music.ogg。大致相当于"$(dirname "$f")"/music.ogg

答案 1 :(得分:0)

我通常这样使用:

for f in ../music/artist/*/*.ogg
do
    dest="${f/.*.ogg/music.ogg}"
    if [[ $f != "$dest" ]] # nothing to do if name doesn't change
    then 
        if [[ -a $dest ]]
        then
            printf 'WARNING: File already exists: %s\n' "$dest"
        else
            mv "$f" "$dest"
        fi
    fi
done

答案 2 :(得分:0)

您可以像这样更改代码

accumulate()

这里for f in ../music/artist/*/*.ogg do echo mv $f "$(dirname "$f")"/music.ogg done 将从变量中提取目录名称,您可以将其附加到dirname上以得到所需的结果。

对于您提供的示例路径

如果music.ogg等于$f,那么结果将是

music/artist/arai/blue.ogg

答案 3 :(得分:0)

我希望这对您有帮助:

以前:

let imageGenerator = AVAssetImageGenerator(asset: playerItem.asset)
let progressSeconds = playerItem.duration.seconds * Double(progress)
let time = CMTime(seconds: progressSeconds, preferredTimescale: 5)
if let imageRef = try? imageGenerator.copyCGImage(at: time, actualTime: nil) {
   image = UIImage(cgImage:imageRef)
}

源代码:

let videoThumbnailsOutput = AVPlayerItemVideoOutput(pixelBufferAttributes: [String(kCVPixelBufferPixelFormatTypeKey): NSNumber(value: kCVPixelFormatType_32BGRA)])
player?.currentItem?.add(videoThumbnailsOutput)

if let pixelBuffer = videoThumbnailsOutput.copyPixelBuffer(forItemTime: time, itemTimeForDisplay: nil) {
   let ciImage = CIImage(cvPixelBuffer: pixelBuffer)

执行后:

[root@user]# tree music
music
└── artist
    ├── df
    │   └── mp.ogg
    ├── gh
    │   └── pl.ogg
    ├── jk
    │   └── gl.ogg
    ├── po
    │   └── ui.ogg
    ├── ty
    │   └── lk.ogg
    └── ui
        └── dh.ogg

7 directories, 6 files

您会看到所有文件都已正确重命名。

答案 4 :(得分:0)

@model FuelActivityTrackerDal.Models.ActivityHeader

<div class="k-edit-form-container">
    <h3>Activity</h3>
    <br />
    @Html.HiddenFor(model => model.Name)

    <div class="k-edit-label">
        @Html.LabelFor(model => model.Name)
    </div>


    <div class="k-edit-label">
        @Html.LabelFor(model => model.ActivityDate)
    </div>
    <div class="k-edit-field">
        @Html.Kendo().DateTimePickerFor(model => model.ActivityDate)
        @Html.ValidationMessageFor(model => model.ActivityDate)
    </div>
</div> 

这是一种单线工作。它执行find命令的exec选项,然后获取目录名称,并将原始文件重命名为music.ogg。