我一直在寻找正确的解决方案。我找到了一些相近的例子。 Bash script to replace spaces in file names
但我正在寻找的是如何替换当前目录/子目录名称中的多个 .
点,然后“递归地”替换 FILENAMES 中的多个 .
点(不包括 *.extension) .
这个例子很接近,但不正确:
find . -maxdepth 2 -name "*.*" -execdir rename 's/./-/g' "{}" \;
另一个例子,但也不正确:
for f in *; do mv "$f" "${f//./-}"; done
所以
dir.dir.dir/dir.dir.dir/file.file.file.ext
会变成
dir-dir-dir/dir-dir-dir/file-file-file.ext
最佳答案
您可以像这样分配给变量和管道:
x="dir.dir.dir/dir.dir.dir/file.file.file.ext"
echo "$(echo "Result: ${x%.*}" | sed 's/\./_/g').${x##*.}"
Result: dir_dir_dir/dir_dir_dir/file_file_file.ext
关于bash - 使用 Bash 替换目录/子目录名称中的点或字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925147/