我是 bash shell 编程的新手,需要帮助
我有一个目录“production\new\images\sp”,其中包含多个具有多个文件名的子文件夹,格式为“xxxxx_xxxxx.jpg”。我喜欢在每个子文件夹中将每个文件名从这种格式重命名为“xxxxx-xxxxx.jpg”格式。
例子:
86193730_43134.jpg =====> 86193730-43134.jpg
我是 bash shell 编程的新手,需要帮助
我有一个目录“production\new\images\sp”,其中包含多个具有多个文件名的子文件夹,格式为“xxxxx_xxxxx.jpg”。我喜欢在每个子文件夹中将每个文件名从这种格式重命名为“xxxxx-xxxxx.jpg”格式。
例子:
86193730_43134.jpg =====> 86193730-43134.jpg
尝试这个 :
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 编写的。
如果重命名不可用(如在 OSX 上):
find . -type f -name "*.jpg" -execdir bash -c 'f="{}"; nf=$(tr "_" "-" <<< "$f") && mv "$f" "$nf"' \;
这对我有用(由@sputnik改进):
for f in *_*.jpg; do mv "$f" "$(echo "$f" | sed 's/_/-/')" ; done