Как я могу выполнить определенную команду для каждого файла/папки в текущей папке?Выполнение команды для каждого файла в текущем каталоге
Я начал с этого в качестве базового скрипта, но это кажется, что он работает только при использовании временных файлов, и мне не очень нравится 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||";
Это справочники. Не папки. ;) –
См. Мой ответ [здесь] (http: // serverfault.com/q/62411/1293 # 62522), чтобы сделать это, называя 'du' только один раз вместо * дважды для каждого файла *. Вам не понадобится цикл 'for'. Вы можете добавить '--max-depth = 1' в' du', если это необходимо, и вы можете добавить 'sed 's $ FOLDER ||" '. –
@ Денис Уильямсон: хороший ответ, не нужно было смотреть в 'awk'. – Quamis