find:路径必须在表达式之前

时间:2011-05-21 14:57:51

标签: bash shell

我收到了这个错误:

“find:paths必须在表达式之前

用法:找[-H] [-L] [-P] [路径...] [表达式]“

对于我生成的代码:

for subdir in `find ./$file/ -name "*.$@"`
do
new_ext=`echo $subdir | sed "s/\(.*\.\)$/\1$new/"`
mv $subfile $new_ext
done

我正在尝试使用上面的代码重命名当前和子目录中的文件扩展名,而不必输入旧的文件扩展名。

任何帮助指出我做错了什么都会感激不尽。

2 个答案:

答案 0 :(得分:2)

这是我的尝试:

for old_extension in "$@"
do  
    find ./$file -name "*.$old_extension" | while read old_file
    do
        new_file=${old_file%$old_extension}new
        echo mv "$old_file" "$new_file"
    done
done
  • find命令的输出由while循环读取,一次一行,每行分配给变量$ old_file
  • $ {old_file%$ old_extension}构造删除扩展名,然后将新扩展名“new”附加到$ new_file
  • echo mv ...行将输出到用于视觉验证的屏幕
  • 一旦您对结果感到满意,您可以移除回声并再次运行脚本以真正造成伤害。请记住:请在删除回声之前检查结果。
  • 请注意,我已针对包含和不包含嵌入空格的文件测试了我的解决方案。

答案 1 :(得分:1)

"*.$@"肯定不会做你想要的。构建命令in an array