通过 bash 脚本与多个目录中的文件交互

2023-12-14

我生成了一个迭代多个 .csv 文件的脚本,将相关文件转换为 UTF-8:

#!/bin/bash

cd /home/user/prod/
charset="text/plain; charset=iso-8859-1"

for file in *.csv; do
    if [[ $(file -i "$file") == "$file: $charset" ]]; then
        iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file.new";
        mv -f "$file.new" "$file";
fi
done

这可行,但我真正想要的是迭代驻留在不同路径中的文件。我尝试从设置一个路径(而不是定义当前目录)开始,但我无法让它工作:

#!/bin/bash

path="/home/user/prod"
charset="text/plain; charset=iso-8859-1"

for file in "$path/*.csv"; do
    if [[ $(file -i "$file") == "$file: $charset" ]]; then
        iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file.new";
        mv -f "$file.new" "$file";
fi
done

通过设置路径来做到这一点的最佳方法是什么?如何处理驻留在不同路径中的文件(相同扩展名)?


您已经接受了@Charles Duffy 的答案,但是(如果我理解得很好)您的问题是关于将文件放在不同的目录因此,如果您需要处理多个目录中的多个 csv 文件,您可以使用以下代码片段:

# array containing the different directories to work with
pathDir=("/foo/bar/dir1" "/buzz/fizz/dir2")

for dir in "${pathDir[@]}" # For each directory
do
    for file in "$dir/"*.csv; do # For each csv file of the directory

        if [[ $(file -i "$file") == "$file: $charset" ]]; then
            iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file.new";
            mv -f "$file.new" "$file";
        fi

    done
done

The pathDir变量是一个数组,其中包含不同目录的路径。

首先for循环遍历该数组以获取要检查的所有路径。

第二for像前面的答案一样循环遍历当前测试目录的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 bash 脚本与多个目录中的文件交互 的相关文章

  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • Rails 4.1 环境变量未重新加载

    我创建了一个application yml文件在配置目录中并添加了一些键值对 即AWS REGION us east 1 我还添加了以下内容application rb读取文件并更新 ENV 哈希 if Rails env developm
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 为什么 Git Bash 无法运行我的可执行文件?

    I am on git for windows https github com git for windows 吉特 巴什 我无法在命令行上运行可执行文件 Pedr Abc 07 MINGW64 c dev ls sqlite3 exe
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • Bash 中单行 while 循环的语法

    我无法找到分号和 或大括号的正确组合 我想这样做 但作为命令行中的一句 while 1 do foo sleep 2 done while true do foo sleep 2 done 顺便说一句 如果您在命令提示符下将其输入为多行 如
  • 替换多个文件中的多个字符串

    我有一个包含正则表达式列表和替换文字字符串的文件 格式如下 OLD REGEXP 1 NEW STRING 1 OLD REGEXP 2 NEW STRING 2 我想替换所有匹配的字符串OLD REGEXP X with NEW STRI
  • Python 3.6 shell 中可点击的 html 链接?

    比如说 我有一个充满 html 链接的列表 看起来像这样 https www nytimes com 2017 05 19 realestate they can afford to buy but they would rather re
  • 在运行时检查 GCC 版本

    我需要找出 C 程序执行过程中 运行时 可用的 系统中安装的 GCC 版本 主要版本和次要版本 意思是 以编程方式提取可用 gcc 的版本 就像我在 shell 中输入 gcc version 一样 但在 c 程序中 The GNUC an
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 来源和出口有什么区别?

    我正在编写一个 shell 脚本 以读取具有 key value 对的文件并将这些变量设置为环境变量 但我有疑问 如果我这样做source file txt是否会将该文件中定义的变量设置为环境变量 或者我应该逐行读取文件并使用导出命令设置它
  • 如何检查目录是否有读/写权限

    我有一个如图所示的目录 d wx x x 2 bcheudev bcheudev 4096 Jun 18 06 16 test 这表明该目录没有读取权限 但是当我通过 shell 脚本检查相同内容时 它给出的结果是 dir test 具有读
  • 如何在Linux中自动启动需要X的应用程序

    我试图在系统进入运行级别 5 时自动启动 X 应用程序 这样做的正确方法是什么 我写了一个脚本并将其放在 etc init d 中 我已运行适当的 chkconfig 命令来设置 etc rcX d 目录中的符号链接 一切工作正常 除了当我
  • 生成斐波那契数列的 Shell 脚本

    我正在尝试创建一个递归函数来计算斐波那契系列中的第 n 个数字 我已经找到了很多解决这个问题的方法 但我不知道为什么我的解决方案不起作用 谢谢 function fib if 1 eq 1 o 1 eq 2 then return 1 el
  • 如何找到进程启动时使用的原始用户名?

    有一个 perl 脚本需要以 root 身份运行 但我们必须确保运行该脚本的用户最初没有以用户 foo 身份登录 因为它将在脚本运行期间被删除 那么 我如何查明自登录以来可能已多次起诉的用户是否在该链中的任何时间都没有模拟过 foo 我发现
  • 通知管道右侧左侧故障?

    我越来越喜欢在 shell 脚本中的函数之间使用类似于生成器的模式 像这样的事情 parse commands da cmd file process commands 然而 这种模式的基本问题是 如果 parse command 遇到错误

随机推荐

  • 在 Go 中创建空闲超时?

    我将 CloudFlare 用于我的一个大容量网站 它位于我的堆栈前面 问题是 CloudFlare 除了创建新连接之外 还使空闲连接保持打开状态 这不是我可以更改的设置 当我让 Varnish 或 Nginx 坐在前面侦听端口 80 时
  • 如何在不运行 Bash 脚本的情况下对其进行语法检查?

    是否可以在不执行 bash 脚本的情况下检查它的语法 使用 Perl 我可以运行perl c script name bash 脚本有等效的命令吗 bash n scriptname 也许有一个明显的警告 这会验证语法 但不会检查您的 ba
  • Android中的App如何以全屏模式运行

    当我将它运行到选项卡中时 我创建了一个应用程序 然后它不会全屏显示 我还完成了它的属性 全屏无标题栏 所以它没有标题 thanks 你可以加android theme android style Theme NoTitleBar Fulls
  • LineChart FX - 删除实线

    我有一个关于图表 LineChart JavaFX 的好奇问题 I have this graph dots forming a jump on the X axis as shown by the two red points I sco
  • PHP 字符串插值语法

    我尝试使用以下语法进行重定向 header location readMore php id post post id 但这没有用 只有在有人建议用大括号括起来之后它才起作用 post post id 正确的语法是 header locat
  • 日期/时间转换 ColdFusion

    我正在使用一个以 ISO 8601 格式显示日期和时间的脚本 如下所示 2012 05 17T17 35 44 000Z 但我希望在使用时以正常的 ColdFusion 时间戳格式显示 Now 符号 所以采用这种格式 ts 2012 05
  • 我如何才能对除一个程序集之外的所有程序集隐藏“setter”?

    我在中提到过这个问题我的另一个问题 但我认为值得将其分解为自己的问题 因为它并不真正依赖于我提到的其他场景 无论如何 到Q上 不知道这是否可能 寻找解决方案 解决方法 我有一个类库 除了 POCO 之外什么都没有 MyCompany MyP
  • 按下按钮,文本框中的值增加

    因此 当页面加载时 文本框将包含一个存储的值 我希望用户按下 按钮 文本框中的值将增加一 我猜这是用 JQuery 完成的 到目前为止我有关于从哪里开始的任何想法
  • 如何使用 Typescript 中的现有枚举创建超级集枚举

    我需要使用另一个枚举创建一个枚举 如下所示 enum problems eazy medium hard enum moreProblems eazy medium hard frenzy 我需要更多问题枚举使用枚举问题 用例 当枚举 B
  • 使用 Win32 C++ 访问受保护的网络共享

    有没有办法使用 Win32 C API 访问登录 密码保护的网络共享 列出文件并获取其名称和创建日期 我不希望 samba 网络共享出现在我的资源管理器中 这可以通过 WNetAddConnection2 方法来完成 谢谢大家 虽然我同意本
  • 命名空间 clr-namespace <...> 中不存在名称 <...>

    我有一个小型 WPF 应用程序 过去可以正常编译 但现在不行了 我真的不能说它在哪一点停止了建设 前一天还好好的 第二天就不行了 这是项目结构 除了标准 net dll 之外 没有其他项目或外部引用 这是问题产生的用户控件
  • 在 C# 中定义 get 或 set

    朋友们 我在 C 类中使用 get 或 set 时遇到问题 当我使用 get 或 set 时给出错误 类中的无效令牌 请参阅下面的代码 我有这个问题 static int abcd get return abcd thanx 这是完整的代码
  • 使用自动增量字段插入触发器之前/之后

    我在使用插入触发器时遇到问题 该触发器应该修复表中的列 id auto increment int thread id int NULL 我想要实现的是设置thread id to id如果它被插入为 NULL 我失败了 因为 using
  • 如何给 ImageView 赋予六边形形状

    如何赋予六边形形状ImageView 可以用同样的方式做吗 如果是这样那怎么办 如果这不可能通过此方法实现 那么如何实现呢
  • 如何让k8s cpu和内存HPA协同工作?

    我正在使用 k8s HPA 模板作为 CPU 和内存 如下所示 apiVersion autoscaling v1 kind HorizontalPodAutoscaler metadata name Chart Name cpu labe
  • 检索任意日期之前/之后最后更新的属性

    我有兴趣检索 WikiData 项目的属性 但前提是该属性是在某个日期之前或之后添加或修改的 所以我有这个SPARQL查询获取 Q24 的所有属性 SELECT itemLabel propLabel statement property
  • 是否可以在 Rust for 循环中声明变量的类型?

    C 示例 for long i 0 i lt 101 i 在 Rust 中我尝试过 for i i64 in 1 100 我可以轻松地声明一个let i i64 for循环之前的var 但我宁愿学习正确的方法来做到这一点 但这导致 erro
  • 在 JavaScript 中正确引用 ASP.NET 用户控件中的控件

    我有一个 ASP NET 用户控件 其中包含一个文本框控件和一个按钮控件 该用户控件将多次添加到我的网页中 我需要一段 JavaScript 只要文本框发生更改就会运行 并在文本框的值无效时禁用按钮 我的问题是 如何将 JavaScript
  • b 表中的 BootstrapVue 条件列

    如果当前用户是管理员 我只想显示我的专栏之一 我不知道如何使用 bootstrapVue 来做到这一点 有任何想法吗 这是基于 Troy 评论的片段 我已向名为的字段对象添加了一个自定义属性requiresAdmin 这不是标准的一部分Bo
  • 通过 bash 脚本与多个目录中的文件交互

    我生成了一个迭代多个 csv 文件的脚本 将相关文件转换为 UTF 8 bin bash cd home user prod charset text plain charset iso 8859 1 for file in csv do