对当前目录中的每个文件执行命令

Qua*_*mis 18 linux bash

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

我已经开始使用它作为基本脚本,但这似乎只在使用临时文件时才有效,而且我真的不喜欢这个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";
Run Code Online (Sandbox Code Playgroud)

对于任何感兴趣的人,我想制作一个文件夹列表,按其大小排序.这是最终结果

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||";
Run Code Online (Sandbox Code Playgroud)

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

Ton*_*roy 32

也许是xargs,它为stdin上收到的每个额外的参数行重新调用之后指定的命令...

ls -1 $FOLDER | xargs du
Run Code Online (Sandbox Code Playgroud)

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

du *
Run Code Online (Sandbox Code Playgroud)

...?要么...

for X in *; do
    du $X
done
Run Code Online (Sandbox Code Playgroud)

(就个人而言,我使用zsh,你可以修改glob模式,只能找到说常规文件,或只有目录,只有符号链接等 - 我很确定在bash中有类似的东西 - 如果你需要,可以挖掘细节).

我错过了你的部分要求吗?


Dan*_*ler 10

find命令还允许您为找到的每个项执行命令.没有进一步的参数,它将在当前目录中找到所有文件和文件夹,如下所示:

$ find -exec du -h {} \;
Run Code Online (Sandbox Code Playgroud)

{}部分是放置匹配的"变量",此处作为参数du.\;结束命令.

  • 这是我第一次看到`find`的例子,它实际上解释了给出的完整命令是如何实现的.谢谢! (3认同)