2010-11-10 200 views
14

如何为当前文件夹中的每个文件/文件夹执行某个命令?对当前目录中的每个文件执行命令

我已经开始将它作为一个基本脚本,但这似乎只有在使用临时文件时才起作用,而且我不太喜欢ideea。有没有其他方法?

FOLDER="."; 
DIRS=`ls -1 "$FOLDER">/tmp/DIRS`; 

echo >"/tmp/DIRS1"; 
while read line ; do 
    SIZE=`du "$FOLDER$line"`; 
    echo $SIZE>>"/tmp/DIRS1"; 
done < "/tmp/DIRS"; 

任何有兴趣,我想使文件夹列表,通过它们的大小进行排序。下面是最终的结果

FOLDER="$1"; 
for f in $FOLDER/*; do 
    du -sb "$f"; 
done | sort -n | sed "s#^[0-9]*##" | sed "s#^[^\./]*##" | xargs -L 1 du -sh | sed "s|$FOLDER||"; 

导致du -sb $FOLDER/* | sort -n | sed "s#^[0-9]*##" | sed "s#^[^\./]*##" | xargs -L 1 du -sh | sed "s|$FOLDER||";

+3

他们是目录。不是文件夹。 ;) – 2010-11-10 09:30:26

+0

请参阅我的回答[here](http:// serverfault。com/q/62411/1293#62522),通过每个文件调用'du'而不是*两次来实现这一点。你不需要'for'循环。如果需要的话,你可以在'du'中加入'--max-depth = 1',你可以添加你的'sed'| $ FOLDER ||“'。 – 2010-11-10 15:08:29

+0

@丹尼斯威廉姆森:很好的答案,并没有看到'awk'。 – Quamis 2010-11-11 14:41:38

回答

25

也许xargs的,这reinvokes标准输入收到后,指定的参数,其他每行命令

ls -1 $FOLDER | xargs du 

但是,在这种情况下,为什么不...

du * 

...?还是......

for X in *; do 
    du $X 
done 

(就个人而言,我使用的zsh,在那里你可以修改glob模式只发现说普通的文件,或者只有目录,只是符号链接等等 - 我敢肯定有在bash类似的东西 - 如果你需要的话可以挖掘细节)。

我是否缺少部分需求?

+0

最终脚本应显示按大小排序的文件/文件夹列表,按大小排列 – Quamis 2010-11-10 09:31:09

+1

对于'xargs'。奇妙的低估工具。 – 2010-11-10 09:31:40

+0

啊,在这种情况下'du * |单独排序-n -k1'就足够了。没有? – 2010-11-10 09:32:48

0

这适用于在当前目录中的所有文件:

do 
    /usr/local/mp3unicode/bin/mp3unicode -s cp1251 --id3v2-encoding unicode "$file" 
done 
2

这是没用的对文件进行解析的ls输出循环。 Bash可以用通配符扩展来实现。

du的结果存储在一个变量中以将其输出到文件中也是无用的变量使用。

我的建议:

for i in ./tmp/DIRS/* 
do 
    du "$i" >> "/tmp/DIRS1" 
done 
3

这是怎么回事?

function process() { 
    echo "Processing $1" 
} 

for i in * 
do 
    process $i 
done 

你可以把所有的“工作”你想要的功能process内部完成。这将为您的当前目录做到这一点。

+0

能否请你看这个情况? https://stackoverflow.com/questions/45482766/script-to-execute-command-to-all-files-in-folder?noredirect=1#comment77926070_45482766 – upicik 2017-08-03 12:02:36

6

find命令可让您为它找到的每个项目执行命令。如果没有进一步的论据就会发现在当前目录下的所有文件和文件夹,如:

$ find -exec du -h {} \; 

{}部分是在比赛放在这里作为参数du的“变量”。 \;结束命令。

+2

这是我第一次看到一个'发现'实际上解释了完整的命令是如何实际工作的。谢谢! – alanaktion 2016-08-30 00:31:38

相关问题