我正在尝试找到一个bash脚本,该脚本将以递归方式查找扩展名为.bx的文件,并删除此扩展名。文件名没有特定的格式(一些是带有“。”前缀的隐藏文件,一些名称中有空格等),并且并非所有文件都有此扩展名。
我不确定如何找到扩展名为.bx的每个文件(在我的cwd中和下面)并将其删除。谢谢你的帮助!
答案 0 :(得分:15)
find . -name '*.bx' -type f | while read NAME ; do mv "${NAME}" "${NAME%.bx}" ; done
答案 1 :(得分:2)
find -name "*.bx" -print0 | xargs -0 rename 's/\.bx//'
答案 2 :(得分:2)
Bash 4 +
shopt -s globstar
shopt -s nullglob
shopt -s dotglob
for file in **/*.bx
do
mv "$file" "${file%.bx}"
done
答案 3 :(得分:1)
假设您位于您要执行此操作的文件夹中
find . -name "*.bx" -print0 | xargs -0 rename .bx ""
答案 4 :(得分:1)
for blah in *.bx ; do mv ${blah} ${blah%%.bx}
答案 5 :(得分:1)
这是另一个版本,它执行以下操作:
$old_ext
及以下.bx
中的cwd
变量(现在设置为$files
)查找文件,将其存储在$new_ext
.xyz
变量的新内容,当前设置为dirname
)该脚本使用basename
和#!/bin/bash
old_ext=".bx"
new_ext=".xyz"
files=$(find ./ -name "*${old_ext}")
for file in $files
do
file_name=$(basename $file $old_ext)
file_path=$(dirname $file)
new_file=${file_path}/${file_name}${new_ext}
#echo "$file --> $new_file"
mv "$file" "$new_file"
done
分别查找文件路径和文件名。
{{1}}
答案 6 :(得分:1)
额外:如何从文件名中删除任何扩展程序
find -maxdepth 1 -type f | sed 's/.\///g'| grep -E [.] | while read file; do mv $file ${file%.*}; done
将从最后一个点开始剪切,即pet.cat.dog ---> pet.cat
find -maxdepth 1 -type f | sed 's/.\///g'| grep -E [.] | while read file; do mv $file ${file%%.*}; done
将从第一个点开始剪切,即pet.cat.dog --->宠物
“ - maxdepth 1”限制对当前目录的操作,“ - type f”仅用于选择文件。 Sed& grep组合用于仅选择带有点的文件名。 “mv”命令中的百分号数量将定义实际切割点。