kri*_*hna 31 find shell-script rename files mv
我尝试遵循 shell 脚本,它应该替换所有 xml 文件名中的空格
for xml_file in $(find $1 -name "* .xml" -type f);
do
echo "removing spaces from XML file:" $xml_file
mv "$xml_file" "${xml_file// /_}";
done
Run Code Online (Sandbox Code Playgroud)
假设,我有名称为 的 xml 文件xy z.xml,然后它给出:
removing spaces from XML file: /home/krishna/test/xy
mv: cannot stat `/home/krishna/test/xy': No such file or directory
removing spaces from XML file: .xml
mv: cannot stat `z.xml': No such file or directory
Run Code Online (Sandbox Code Playgroud)
cha*_*aos 41
使用它bash:
find $1 -name "* *.xml" -type f -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
Run Code Online (Sandbox Code Playgroud)
find将搜索名称中带有空格的文件。文件名将使用空字节 ( -print0) 作为分隔符打印,以处理特殊文件名。然后read内置函数读取由空字节分隔的文件名,最后mv用下划线替换空格。
编辑:如果你也想删除目录中的空格,那就有点复杂了。目录被重命名,然后无法再通过名称find查找进行访问。尝试这个:
find -name "* *" -print0 | sort -rz | \
while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
Run Code Online (Sandbox Code Playgroud)
该sort -rz反转文件顺序,使文件夹中的文件最深的是移动第一个和文件夹本身将是最后一个。因此,在所有文件和文件夹在其中重命名之前,永远不会重命名文件夹。mv循环中的命令也略有变化。在目标名称中,我们只删除文件基本名称中的空格,否则将无法访问。
A.B*_*.B. 28
使用 rename
find . -type f -name "* *.xml" -exec rename "s/\s/_/g" {} \;
Run Code Online (Sandbox Code Playgroud)
或与 $1
find "$1" -type f -name "* *.xml" -exec rename "s/\s/_/g" {} \;
Run Code Online (Sandbox Code Playgroud)使用 mv
find . -type f -name "* *.xml" -exec bash -c 'mv "$0" "${0// /_}"' {} \;
Run Code Online (Sandbox Code Playgroud)
或与 $1
find "$1" -type f -name "* *.xml" -exec bash -c 'mv "$0" "${0// /_}"' {} \;
Run Code Online (Sandbox Code Playgroud)这是我在面临同样问题时发现的一种方法:
for f in *; do mv "$f" `echo $f | tr ' ' '_'`; done
Run Code Online (Sandbox Code Playgroud)
我正在编写一个 bash 脚本文件来自动更新我的 ssl 证书。