有谁能推荐一个安全的解决方案,用下划线递归地替换从给定根目录开始的文件名和目录名中的空格吗?例如:

$ tree
.
|-- a dir
|   `-- file with spaces.txt
`-- b dir
    |-- another file with spaces.txt
    `-- yet another file with spaces.pdf

变成:

$ tree
.
|-- a_dir
|   `-- file_with_spaces.txt
`-- b_dir
    |-- another_file_with_spaces.txt
    `-- yet_another_file_with_spaces.pdf

推荐答案

使用rename(又名prename),这是一个Perl脚本,可能已经在您的系统上了.分两步进行:

find . -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'

基于Jürgen's答案,能够使用/usr/bin/rename(Perl脚本)的"修订版1.5 1998/12/18 16:16:31 RM1"在一个绑定中处理多层文件和目录:

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;

Linux相关问答推荐

排除最大FIFO大小故障

在程序集x86_64中跳转后调用ret时出现分段故障

在不影响ROS2安装的情况下更新Ubuntu Linux中的CMake

变量在vim中打印良好,但在bashshell中打印不好,这怎么可能发生?

JSON 转义 CURL/JQ 输出

Docker 守护进程安装在 ubuntu jenkins docker 容器代理权限被拒绝

Linux BlueZ 5.65 hcitool 结合服务 UUID 和制造数据广告

使用ansible配置Linux VM使用vmware_vm_shell模块时变成su?

sed:用空格替换

中的换行符

linux shell获取多文件交集

如何为命令的所有选项启用无密码 sudo?

使用 awk 将索引列添加到 csv

与交换空间相关的链接器性能?

如果关键字触发然后执行命令,Shell 脚本来监视日志(log)文件?

ldconfig 错误:使用 Linux 加载程序时不是符号链接

卸载从源代码构建的python?

conda 命令会提示错误:Bad Interpreter: No such file or directory

区分 Java 线程和 OS 线程?

Linux 守护进程

svn over HTTP 代理