2010-11-10 155 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

相關問題