【发布时间】:2010-12-20 21:10:35
【问题描述】:
我在一个文件夹中有许多文件,我想用下划线替换所有文件名中的每个空格字符。我怎样才能做到这一点?
【问题讨论】:
标签: linux replace command filenames spaces
我在一个文件夹中有许多文件,我想用下划线替换所有文件名中的每个空格字符。我怎样才能做到这一点?
【问题讨论】:
标签: linux replace command filenames spaces
应该这样做:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
【讨论】:
1 - foo.jpg,而我的文件夹中已经有1.jpg。
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
* 更改为PATH_TO_YOUR_DIRECTORY。
我更喜欢使用命令“rename”,它采用 Perl 风格的正则表达式:
rename "s/ /_/g" *
您可以使用 -n 标志进行试运行:
rename -n "s/ /_/g" *
【讨论】:
rename " " "_" *
rename 在 OSX 中不可用。
rename 可用。
使用 sh...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
如果您想在扣动扳机之前尝试一下,只需将 mv 更改为 echo mv。
【讨论】:
如果你使用 bash:
for file in *; do mv "$file" ${file// /_}; done
【讨论】:
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try mv --help' 以获取更多信息。
mv --help' for more information. mv: missing file argument Try mv --help' 以获取更多信息。 mv:缺少文件参数尝试mv --help' for more information. mv: missing file argument Try mv --help' 了解更多信息。
如果您想递归地应用替换任务怎么办?你会怎么做?
嗯,我自己找到了答案。不是最优雅的解决方案,(也尝试重命名不符合条件的文件)但它有效。 (顺便说一句,在我的情况下,我需要用 '%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
【讨论】:
这是另一个解决方案:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
【讨论】:
假设您的所有文件都是 .txt 文件,请尝试这样的操作:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
【讨论】:
tr --help' for more information. mv: missing file argument Try mv --help' 了解更多信息。
引用你的变量:
for file in *; do echo mv "'$file'" "${file// /_}"; done
删除“echo”以进行实际重命名。
【讨论】:
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat \'1130_1_bedroom_floor_plan.jpg\'': No such file or directory mv: cannot stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat \'1130_diningroom_table.jpg\'' 的错误:没有这样的文件或目录
用Linux 中的另一个字符串替换字符串(在您的情况下为空格字符)的最简单方法是使用sed。你可以这样做
sed -i 's/\s/_/g' *
希望这会有所帮助。
【讨论】:
要重命名所有带有.py 扩展名的文件,请使用,
find . -iname "*.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
【讨论】:
这将在使用 Python >= 3.5 的 Linux 中递归地将每个文件夹和文件名中的 ' ' 替换为 '_'。用你的路径更改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 glob2
pip install glob2
python -c "import os;import glob2;[os.rename(x,x.replace(' ','_')) for x in glob2.glob('path_to_your_folder/**')]"
【讨论】: