I have a number of files in a folder, and I want to replace every space character in all file names with underscores. How can I achieve this?
假设你所有的文件都是. txt 的,试试这样做:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
如果使用 bash:
for file in *; do mv "$file" ${file// /_}; done
用..。
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
If you want to try this out before pulling the trigger just change mv to echo mv.
mv
echo mv
这个应该可以:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Quote your variables:
for file in *; do echo mv "'$file'" "${file// /_}"; done
删除“ echo”以执行实际的重命名。
我更喜欢使用“ rename”命令,它采用 Perl 风格的正则表达式:
rename "s/ /_/g" *
You can do a dry run with the -n flag:
rename -n "s/ /_/g" *
如果要应用替换任务 recursively,该怎么做?
我刚刚自己找到了答案。虽然不是最优雅的解决方案(也尝试重命名不符合条件的文件) ,但它确实有效。(顺便说一句,在我的例子中,我需要用’% 20’重命名文件,而不是用下划线)
#!/bin/bash find . -type d | while read N do ( cd "$N" if test "$?" = "0" then for file in *; do mv "$file" ${file// /%20}; done fi ) done
用 Linux中的另一个字符串替换字符串(在您的情况下是空格字符)的最简单方法是使用 sed。你可以这样做
Linux
sed
sed -i 's/\s/_/g' *
希望这个能帮上忙。
要使用 .py扩展名重命名所有文件, - type f | xargs-I% rename“ s//_/g”“%”
.py
- type f | xargs-I% rename“ s//_/g”“%”
样本输出,
$ find . -iname "*.py" -type f ./Sample File.py ./Sample/Sample File.py $ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%" $ find . -iname "*.py" -type f ./Sample/Sample_File.py ./Sample_File.py
Here is another solution:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
这将在 Linux 中用 Python > = 3.5递归地将每个文件夹和文件名中的 '_'替换为 ' '。改变你的路径 path_to_your_folder。
'_'
' '
path_to_your_folder
只列出文件和文件夹:
python -c "import glob;[print(x) for x in glob.glob('path_to_your_folder/**', recursive=True)]"
在每个文件夹和文件名中用 '_'替换 ' '
python -c "import os;import glob;[os.rename(x,x.replace(' ','_')) for x in glob.glob('path_to_your_folder/**', recursive=True)]"
使用 Python < 3.5,可以安装 Glob2
pip install glob2 python -c "import os;import glob2;[os.rename(x,x.replace(' ','_')) for x in glob2.glob('path_to_your_folder/**')]"