批量重命名来自不同路径的多个文件

问题描述 投票:0回答:5

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

有一个在{random_name}和不同类型的音乐标题{random_music}的很多文件夹。

所以,我想重新命名{random_music}.oggmusic.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

bash macos batch-rename
5个回答
1
投票

你的模式替换不正确。因为所有的路径与..开始,.*.ogg实际相匹配的整个路径,因此每个文件都变成music.ogg在当前目录。

你想${f/\/*.ogg/music.ogg}代替,或者更好,${f%/*}/music.ogg。这是"$(dirname "$f")"/music.ogg大致相当于。


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

0
投票

你可以改变你这样的代码

for f in ../music/artist/*/*.ogg
do
  echo mv $f "$(dirname "$f")"/music.ogg
done

这里dirname将从您的变量中提取目录名,你可以用你的music.ogg以获得期望的结果追加它。

对于您所提供的示例路径

如果$f等于music/artist/arai/blue.ogg,那么结果将是

mv music/artist/arai/blue.ogg music/artist/arai/music.ogg


0
投票
find ../music/artist/ -type f -name "*.ogg" -exec bash -c 'mydir=`dirname {}`;mv {} $mydir/music.ogg' \;

这是一个班轮,应该工作。它实现了find命令,然后获取目录名和命名原来的文件music.ogg的EXEC选项。


0
投票

我希望这会帮助你:

先前:

[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

源代码:

#!/bin/bash

for i in `ls -ld music/artist/* | awk '{print $9}'`
do
        mv $i/*ogg $i/music.ogg

done

执行后:

music
└── artist
    ├── df
    │   └── music.ogg
    ├── gh
    │   └── music.ogg
    ├── jk
    │   └── music.ogg
    ├── po
    │   └── music.ogg
    ├── ty
    │   └── music.ogg
    └── ui
        └── music.ogg

7 directories, 6 files

正如你可以看到所有的文件得到了正确改名。

© www.soinside.com 2019 - 2024. All rights reserved.