Bash脚本 - 使用Basename输出到文件

时间:2011-02-10 18:56:16

标签: bash unix

我已经创建了一个小脚本来测试获取当前目录中所有文件的基本名称。我想将它们全部输出到文件output.txt但是使用for循环,当然每次都会覆盖该文件。使用下面的代码,我怎么能修改它只是将每个代码附加到文件的末尾(简单地)?

#!/bin/bash

files=$(find -size +100)

for f in $files; do
    basename "$f" > output.txt
done

exit

6 个答案:

答案 0 :(得分:3)

或oneliner:

find -size +100 -exec basename "{}" \; >> output

答案 1 :(得分:3)

使用MrAfs的建议并将重定向移动到循环的末尾。使用>代替>>,您不必明确截断文件。

此外,使用while read循环以便在文件名中有空格的情况下工作。最后的exit是多余的。

#!/bin/bash

find -size +100 | while read -r f
do
    basename "$f"
done > output.txt

在某些情况下,您需要避免创建子shell。您可以使用流程替换:

#!/bin/bash

while read -r f
do
    basename "$f"
done < <(find -size +100) > output.txt

或即将发布的Bash 4.2:

#!/bin/bash

shopt -s lastpipe    
find -size +100 | while read -r f
do
    basename "$f"
done > output.txt

答案 2 :(得分:2)

您应该使用>>附加到文件而不是>

答案 3 :(得分:2)

您可以重定向bas​​h结构

#!/bin/bash

files=$(find -size +100)

for f in $files; do
    basename "$f" 
done > output.txt

exit

答案 4 :(得分:1)

你可以这样做:

rm -f output.txt
for f in $files; do
    basename "$f" >> output.txt
done

或者这个:

for f in $files; do
    basename "$f"
done > output.txt

答案 5 :(得分:1)

不调用basename:


find -size +100 -printf "%f\n" > output.txt