Linux下C 实现批量处理文件名称修改

本程序根据其他同学的方法总结修改而来,主要方便自己修改文件

话不多说,直接贴代码,需要同学自取

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>

char oldstr[512] = {0};
char newstr[512] = {0};

void str_replace(char * src, char * dst, char * oldstr, char * replacestr){
    int i,len;
    len = strlen(src);
 
    for(int i = 0;i < len;i++){
        if(!strncmp(src+i,oldstr,strlen(oldstr))){//查找目标字符串
            strcat(dst, replacestr);
            i += strlen(oldstr) - 1;
        }else{
        	strncat(dst, src + i,1);//保存一字节进缓冲区
	    }
    }
    printf("%s : %s\n", __func__, dst);
}



int change_name_func(char * path){
    char dst[512];
    char cmd[512];

    struct stat s_buf;

    bzero(cmd, sizeof(dst));
    bzero(dst, sizeof(dst));
    stat(path, &s_buf); //获取文件信息, 放到buf中

    //判断输入的文件路径是目录吗, 是往下继续,否则另外处理
    if(S_ISDIR(s_buf.st_mode)){
        printf("------>  %s is a dir \n",path);
        struct dirent *filename = NULL;
        DIR *dp = opendir(path);

        while(filename = readdir(dp)){
            char file_path[512];
            bzero(file_path, 512);
            strcat(file_path, path);
            strcat(file_path, "/");
            if (!strcmp(filename->d_name, ".") || !strcmp(filename->d_name, "..")){
                continue;
            }
            strcat(file_path, filename->d_name);

            printf(" file_path : %s \n", file_path);

            stat(file_path, &s_buf);

            if(S_ISDIR(s_buf.st_mode)){
                printf(" %s is a dir \n", file_path);
                change_name_func(file_path);
            }else if(S_ISREG(s_buf.st_mode)){
                printf(" %s is regular file \n", file_path);
                if (!strncmp(filename->d_name, oldstr, strlen(oldstr)))
                {
                    str_replace(file_path, dst, oldstr, newstr);
                    sprintf(cmd, "mv %s %s", file_path, dst);
                    printf("%s\n",cmd);
                    system(cmd);
                }
            }
        }
    }else if(S_ISREG(s_buf.st_mode)){
        printf(" %s is a regular file \n", path);
    }

    return 0;
}

int main(int argc, char * argv[]){
    char * path = argv[1];

    printf("输入需要修改的文件名:\n");
    scanf("%s", oldstr);

    printf("输入新文件名:\n");
    scanf("%s", newstr);


    printf(" oldstr: %s, newstr: %s\n", oldstr, newstr);

    change_name_func(path);

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中,你可以使用find命令来批量修改文件权限。下面介绍四种常用的方法: 方法一:使用find命令和-exec选项来递归修改目录和文件的权限。命令如下: ``` find PATH -type d -exec chmod 755 {} \; find PATH -type f -exec chmod 644 {} \; ``` 其中,PATH是实际要修改权限的目录。 方法二:使用find命令和xargs命令来递归修改目录和文件的权限。命令如下: ``` find PATH -type d | xargs chmod 755 find PATH -type f | xargs chmod 644 ``` 方法三:使用chmod命令递归修改目录下所有目录和文件的权限。命令如下: ``` chmod -R 644 PATH find PATH -type d | xargs chmod 755 ``` 方法四:使用find命令和if语句来根据文件类型修改权限。命令如下: ``` find PATH -exec sh -c "if [[ -d "{}" ]]; then chmod 755 "{}"; else chmod 644 "{}"; fi " \; ``` 请注意,以上命令中的PATH是实际要修改权限的目录。你可以根据需要替换成你的目录路径。 参考资料: 对外开放的网站,最小化原则,经常会将目录设置为755,文件设置为644,本文以四种方法来批量递归修改修改时请注意一些特定目录特殊权限(如缓存目录,上传目录)。以下PATH为实际要修改权限的目录。 Part1linux修改文件夹权限 sudo chmod 600×××(只有所有者有读和写的权限) sudo chmod 644×××(所有者有读和写的权限,组用户只有读的权限) sudo chmod 700×××(只有所有者有读和写以及执行的权限) sudo chmod 666×××(每个人都有读和写的权限) sudo chmod 777×××(每个人都有读和写以及执行的权限) 现在看上面的几个常用用法就非常清楚了,试着自己来修改权限吧。 Part3查询文件(或文件夹)权限的命令 ls -l 文件名(文件夹将 -l 改为 -ld) Part4为所有者(u)增加脚本执行权限( v) chmod u+x install_nginx.sh<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Linux】四种方法批量修改Linux 目录权限为755和文件为644](https://blog.csdn.net/ihero/article/details/130615156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [[linux]修改文件夹下所有文件的权限](https://blog.csdn.net/qq_41996454/article/details/119756239)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值