我开始用这样的:
command *
但是,当该目录为空它不工作; *通配符成为字符“*”字符。 所以我切换到这一点:
for i in *; do
...
done
它的工作原理,但同样,如果没有该目录是空的。 我使出使用LS:
for i in `ls -A`
但当然,然后用空格在他们获得分割文件名。 我试图固定该-Q开关:
for i in `ls -AQ`
这将导致名称仍然被分割,只在开头一个引号字符和结尾的名称。 我失去了一些东西很明显这里,或者是这个难度比它它应该是什么?
假设你只想做一些文件,简单的解决方法是测试如果$ i是一个文件:
for i in *
do
if test -f "$i"
then
echo "Doing somthing to $i"
fi
done
你真的应该总是做这样的测试,因为你几乎肯定不希望把同样的方式文件和目录。 注意围绕“$ I”可以防止与含有空格的文件名问题引号。
find
可能是你想要的。
find . | while read file; do
# do something with $file
done
或者,也许是这样的:
find . -exec <command> {} \;
如果不希望搜索不包含子目录,您可能需要组合添加-type f
和-maxdepth 1
至find命令。 请参阅查找手册页了解详情。
这取决于你是否打算在命令提示符下键入这一点,并命令你申请的文件。
如果它的类型,你可以用你的第二个选择,替代的东西无害的命令去。 我喜欢用回声,而不是MV或者RM,例如。
把它全部在一行:
for i in * ; do command $i; done
当工作 - 或者你可以看看它的失败,无论是无害的,可以按向上箭头,编辑命令,然后再试一次。
使用禁用了javascript,以防止扩大到* .TXT
shopt -s nullglob
for myfile in *.txt
do
# your code here
echo $myfile
done
这应该做的伎俩:
find -type d -print0 | xargs -n 1 -0 echo "your folder: {} !"
find -type f -print0 | xargs -n 1 -0 echo "your file: {} !"
所述print0 / 0在那里,以避免与空白的问题