首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >只列出文件;图标和目录?

只列出文件;图标和目录?
EN

Stack Overflow用户
提问于 2018-05-29 18:57:15
回答 2查看 479关注 0票数 0

我想转换一些csv文件的编码与iconv。它必须是一个脚本,所以我使用的是while; do done。该脚本列出了特定目录中的每个项目,并将它们转换为另一种编码(utf-8)。

目前,我的脚本列出了每个项目,包括目录...下面是我的问题

  1. iconv是目录有问题还是忽略了目录?
  2. 如果有问题,我如何才能仅列出/搜索文件?

我尝试在每个项目的开头使用How to list only files in Bash? a ***./***,这有点烦人(我的程序也不喜欢它)。

另一种可能是ls -p | grep -v /,但这也会影响名称中包含/的文件,不是吗?

我希望你能帮助我。谢谢。

代码如下:

代码语言:javascript
复制
for item in $(ls directory/); do
   FileName=$item
   iconv -f "windows-1252" -t "UTF-8" FileName -o FileName
done

是的,我知道,输入和输出文件不能是相同的^^

EN

回答 2

Stack Overflow用户

发布于 2018-05-29 19:12:35

基于您引用的现有问题,为什么不删除前2个字符,即./

代码语言:javascript
复制
  find . -maxdepth 1 -type f | cut -c 3-

编辑:我同意@DevSolar关于for循环中基于空间的问题。虽然我认为他的解决方案对这个问题更好,但我只想给出一种替代方法来摆脱基于空间的for循环问题。

代码语言:javascript
复制
   OLD_IFS=$IFS
   IFS=$'\n'
   for item in $(find . -maxdepth 1 -type f | cut -c 3-); do
   FileName=$item
   iconv -f "windows-1252" -t "UTF-8" FileName -o FileName
   done
   IFS=$OLD_IFS
票数 0
EN

Stack Overflow用户

发布于 2018-05-29 19:18:58

直接使用find

代码语言:javascript
复制
find . -maxdepth 1 -type f -exec bash -c 'iconv -f "windows-1252" -t "UTF-8" $1 > $1.converted && mv $1.converted $1' -- {} \;

  • find . -maxdepth 1 -type f查找工作directory
  • -exec ...中的所有文件对每个这样的文件执行命令(包括例如filename)
  • bash -c '...'中的空格或换行符的正确处理执行子way)
  • --中的'...'中的命令(更容易执行后续步骤,涉及文件名的多个扩展,该steps终止选项处理,call.
  • {}命令中的found
  • $1被文件名替换为第一个(也是唯一一个)参数,即由文件名替换的{} (请参见bash告诉find -exec'ed命令的结束位置。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50582658

复制
相关文章

相似问题

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