0

我是 bash shell 编程的新手,需要帮助

我有一个目录“production\new\images\sp”,其中包含多个具有多个文件名的子文件夹,格式为“xxxxx_xxxxx.jpg”。我喜欢在每个子文件夹中将每个文件名从这种格式重命名为“xxxxx-xxxxx.jpg”格式。

例子:

86193730_43134.jpg =====> 86193730-43134.jpg
4

3 回答 3

4

尝试这个 :

rename 's/_/-/' *_*.jpg

警告 还有其他同名的工具可能会也可能不会这样做,所以要小心。

如果您运行以下命令 ( linux)

$ file $(readlink -f $(type -p rename))

你有一个像

.../rename: Perl script, ASCII text executable

那么这似乎是正确的工具=)

如果不是,则使其成为默认值(通常已经如此)Debian和衍生,例如Ubuntu

$ sudo update-alternatives --set rename /path/to/rename

(替换/path/to/rename为您的perl's rename命令的路径。


最后但同样重要的是,这个工具最初是由 Perl 的父亲 Larry Wall 编写的。

于 2013-10-17T18:41:44.457 回答
0

如果重命名不可用(如在 OSX 上):

find . -type f -name "*.jpg" -execdir bash -c 'f="{}"; nf=$(tr "_" "-" <<< "$f") && mv "$f" "$nf"' \;
于 2013-10-17T18:48:36.370 回答
-1

这对我有用(由@sputnik改进):

for f in *_*.jpg; do mv "$f" "$(echo "$f" | sed 's/_/-/')" ; done
于 2013-10-17T18:41:44.527 回答