![](/img/trans.png)
[英]How to rename all files in a folder removing everything after space character in linux?
[英]Regex to rename all files recursively removing everything after the character “?” commandline
我有一系列文件,我想使用* nix系统上提供的命令行工具进行清理。 现有文件的名称如此。
filecopy2.txt?filename=3
filecopy4.txt?filename=33
filecopy6.txt?filename=198
filecopy8.txt?filename=188
filecopy3.txt?filename=19
filecopy5.txt?filename=1
filecopy7.txt?filename=5555
我希望它们被重命名后删除所有字符,包括“?”。
filecopy2.txt
filecopy4.txt
filecopy6.txt
filecopy8.txt
filecopy3.txt
filecopy5.txt
filecopy7.txt
我相信以下正则表达式会抓住我想从名称中删除的位,
\?(.*)
我无法弄清楚除此之外如何完成这项任务。
如果所有文件都在同一目录中(忽略.dotfiles
):
$ rename -n 's/\?filename=\d+$//' -- *
如果要在目录层次结构中递归重命名文件:
$ find . -type f -exec rename -n 's/\?filename=\d+$//' {} +
删除-n
选项,进行重命名。
find . -depth -name '*[?]*' -exec sh -c 'for i do
mv "$i" "${i%[?]*}"; done' sh {} +
使用zsh
:
autoload zmv
zmv '(**/)(*)\?*' '$1$2'
将其更改为:
zmv -Q '(**/)(*)\?*(D)' '$1$2'
如果你想重命名点文件。
请注意,如果文件名可能包含多个?
角色,两者都只会从最右边的一个修剪。
一个bash命令:
for file in *; do
mv $file ${file%%\?filename=*}
done
command: 在这种情况下,您可以使用命令:
echo 'filecopy2.txt?filename=3' | cut -d? -f1
例:
find . -type f -name "*\?*" -exec sh -c 'mv $1 $(echo $1 | cut -d\? -f1)' mv {} \;
if you have it: 如果你有,你可以使用 :
rename 's/\?.*$//' *
我在下载了一堆文件后使用了这个文件,其中包含参数的URL和那些参数最终都在文件名中。
这是一个Bash脚本。
for file in *; do
mv $file ${file%%\?*};
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.