首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用shell脚本自动执行dos2unix?

如何使用shell脚本自动执行dos2unix?
EN

Stack Overflow用户
提问于 2012-07-02 18:39:33
回答 4查看 16.1K关注 0票数 8

我在一个目录中有一堆xml文件,需要对它们执行dos2unix命令,并且会经常添加新文件。我不想每次都在每个文件上手动执行dos2unix命令,而是想用一个脚本自动完成这一切。我从来没有看过shell脚本,但到目前为止,我从一些教程中读到了以下内容:

代码语言:javascript
复制
FILES=/tmp/testFiles/*
for f in $FILES
do
  fname=`basename $f`
  dos2unix *.xml $f $fname
done

然而,我总是得到'usage‘的输出。我认为问题是我没有正确地分配新文件的名称(fname)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-02 19:31:12

您收到用法消息的原因是dos2unix不接受您提供的额外参数。然而,它将接受多个文件名(也通过globs)。您不需要循环,除非您要处理的文件超过了命令行所能接受的数量。

代码语言:javascript
复制
dos2unix /tmp/testFiles/*.xml

这应该是您需要的全部内容,除非您需要递归:

代码语言:javascript
复制
find /tmp/testFiles -name '*.xml' -exec dos2unix {} +

(用于GNU查找)

票数 8
EN

Stack Overflow用户

发布于 2012-07-02 19:22:25

如果所有文件都在一个目录中(不需要递归),那么就差不多了。

代码语言:javascript
复制
for file in /tmp/testFiles/*.xml ; do
    dos2unix "$file"
done

默认情况下,dos2unix应该就地转换并覆盖原始文件。

如果需要递归,您还必须使用find

代码语言:javascript
复制
find /tmp/testFiles -name '*.xml' -print0 | while IFS= read -d '' file ; do
    dos2unix "$file"
done

它将处理/tmp/testFiles/中所有以.xml结尾的文件及其所有子目录。

如果不需要其他步骤,您可以完全跳过shell循环:

非递归:

代码语言:javascript
复制
find /tmp/testFiles -maxdepth 1 -name '*.xml' -exec dos2unix {} +

对于递归:

代码语言:javascript
复制
find /tmp/testFiles -name '*.xml' -exec dos2unix {} +

在您的原始命令中,我看到您找到了每个文件名的基本名称,并试图将其传递给dos2unix,但您的意图并不明确。稍后,在注释中,您说您只想覆盖这些文件。我的解决方案执行转换,不创建备份,并用转换后的版本覆盖原始版本。我希望这是你的意图。

票数 2
EN

Stack Overflow用户

发布于 2012-07-02 18:43:10

代码语言:javascript
复制
mkdir /tmp/testFiles/converted/
for f in /tmp/testFiles/*.xml
do
  fname=`basename $f`
  dos2unix $f ${f/testFiles\//testFiles\/converted\/}
  # or for pure sh:
  # dos2unix $f $(echo $f | sed s@testFiles/@testFiles/converted/@)
done

结果将保存在converted/子目录中。

这里使用构造${f/testFiles\//testFiles\/converted\/} (感谢Rush)或sed在文件名之前添加converted/

代码语言:javascript
复制
$ echo /tmp/testFiles/1.xml | sed s@testFiles/@testFiles/converted/@
/tmp/testFiles/converted/1.xml
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11292010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档