如何使用bash做一些事来的每一个文件的目录中?(How to do something to ev

2019-07-02 19:10发布

我开始用这样的:

command *

但是,当该目录为空它不工作; *通配符成为字符“*”字符。 所以我切换到这一点:

for i in *; do
   ...
done

它的工作原理,但同样,如果没有该目录是空的。 我使出使用LS:

for i in `ls -A`

但当然,然后用空格在他们获得分割文件名。 我试图固定该-Q开关:

for i in `ls -AQ`

这将导致名称仍然被分割,只在开头一个引号字符和结尾的名称。 我失去了一些东西很明显这里,或者是这个难度比它它应该是什么?

Answer 1:

假设你只想做一些文件,简单的解决方法是测试如果$ i是一个文件:

for i in * 
do
    if test -f "$i" 
    then
       echo "Doing somthing to $i"
    fi
done

你真的应该总是做这样的测试,因为你几乎肯定不希望把同样的方式文件和目录。 注意围绕“$ I”可以防止与含有空格的文件名问题引号。



Answer 2:

find可能是你想要的。

find . | while read file; do
    # do something with $file
done

或者,也许是这样的:

find . -exec <command> {} \;

如果不希望搜索不包含子目录,您可能需要组合添加-type f-maxdepth 1至find命令。 请参阅查找手册页了解详情。



Answer 3:

这取决于你是否打算在命令提示符下键入这一点,并命令你申请的文件。

如果它的类型,你可以用你的第二个选择,替代的东西无害的命令去。 我喜欢用回声,而不是MV或者RM,例如。

把它全部在一行:

for i in * ; do command $i; done

当工作 - 或者你可以看看它的失败,无论是无害的,可以按向上箭头,编辑命令,然后再试一次。



Answer 4:

使用禁用了javascript,以防止扩大到* .TXT

shopt -s nullglob
for myfile in *.txt
do
    # your code here
    echo $myfile

done


Answer 5:

这应该做的伎俩:

find -type d -print0 | xargs -n 1 -0 echo "your folder: {} !"
find -type f -print0 | xargs -n 1 -0 echo "your file: {} !"

所述print0 / 0在那里,以避免与空白的问题



文章来源: How to do something to every file in a directory using bash?
标签: bash shell