首页 文章

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

提问于
浏览
2

我收到这个错误:

“find:路径必须先于表达式

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

对于这个代码,我制作了:

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

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

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

2 回答

  • 1

    这是我的尝试:

    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 ...行将输出到屏幕进行可视化验证

    • 一旦你对结果感到满意,你可以删除回声并再次运行脚本来真正造成伤害 . 请记住:请在删除回声之前检查结果 .

    • 请注意,我已针对包含和不包含嵌入空格的文件测试了我的解决方案 .

  • 2

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

相关问题