Q1. У меня есть команда, и я запутался, почему она сортирует файлы по килобайту, а затем по мегабайту?

$ find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | сортировать -nr

80K /home/sl6/S3401636/Lab 4- Reporting Overview in IBM RQM(2).pdf
20K /home/sl6/S3401636/.bash_history
8.5M    /home/sl6/S3401636/Software-Testing-Chapter-4-Test Design Techniques.pdf
7.7M    /home/sl6/S3401636/Software-Testing-Chapter-2 Software Lifecycle.pdf
6.2M    /home/sl6/S3401636/Week5b.ppt
5.1M    /home/sl6/S3401636/Software-Testing-Chapter-5-Test Management.pdf
4.7M    /home/sl6/S3401636/Week 9 - Mobile devices.ppt
4.0K    /home/sl6/S3401636/.viminfo
3.4M    /home/sl6/S3401636/Software-Testing-Chapter-3-Static Techniques.pdf
3.2M    /home/sl6/S3401636/Software-Testing-Chapter-6.pdf
1.9M    /home/sl6/S3401636/Week5a.ppt
1.8M    /home/sl6/S3401636/Lab 8 - Results and Report Analysis(2).pdf
1.6M    /home/sl6/S3401636/Lab 7 - Running a Schedule in IBM's RPT(2).pdf
1.4M    /home/sl6/S3401636/lab01(3).pdf
1.3M    /home/sl6/S3401636/Week 10 Human Capabilities.pdf
1.2M    /home/sl6/S3401636/week05.pdf

Если я передам команду "голова" до конца

$ find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | сортировать -nr | голова -14

1.2M    /home/sl6/S3401636/week05.pdf
1.3M    /home/sl6/S3401636/Week 10 Human Capabilities.pdf
1.4M    /home/sl6/S3401636/lab01(3).pdf
1.6M    /home/sl6/S3401636/Lab 7 - Running a Schedule in IBM's RPT(2).pdf
1.8M    /home/sl6/S3401636/Lab 8 - Results and Report Analysis(2).pdf
1.9M    /home/sl6/S3401636/Week5a.ppt
3.2M    /home/sl6/S3401636/Software-Testing-Chapter-6.pdf
3.4M    /home/sl6/S3401636/Software-Testing-Chapter-3-Static Techniques.pdf
4.0K    /home/sl6/S3401636/.viminfo
4.7M    /home/sl6/S3401636/Week 9 - Mobile devices.ppt
5.1M    /home/sl6/S3401636/Software-Testing-Chapter-5-Test Management.pdf
6.2M    /home/sl6/S3401636/Week5b.ppt
7.7M    /home/sl6/S3401636/Software-Testing-Chapter-2 Software Lifecycle.pdf
8.5M    /home/sl6/S3401636/Software-Testing-Chapter-4-Test Design Techniques.pdf

Q2.Мне интересно, как я могу получить только имена файлов без полного пути. Я пробовал awk с базовым именем, но не смог заставить его работать.

Q3.Кроме того, как мне перечислить самые высокие размеры файлов (от самых высоких до самых низких и от самых низких до самых высоких)

например, 8,5 млн., 7,7 млн., 6,2 млн., 5,1 млн. (от максимального к низшему)5,1 млн., 6,2 млн., 7,7 млн., 8,5 млн.

вместо этого, начиная с самого низкого размера файла 1.2M.

Я думаю, что я могу использовать "хвост" для этой ситуации

Q4.Наконец, если я уберу опцию -h для "du" в вышеприведенных командах, я получу другой набор результатов. Зачем?

4   /home/sl6/S3401636/.viminfo
20  /home/sl6/S3401636/.bash_history
80  /home/sl6/S3401636/Lab 4- Reporting Overview in IBM RQM(2).pdf
1132    /home/sl6/S3401636/week05.pdf
1300    /home/sl6/S3401636/Week 10 Human Capabilities.pdf
1424    /home/sl6/S3401636/lab01(3).pdf
1628    /home/sl6/S3401636/Lab 7 - Running a Schedule in IBM's RPT(2).pdf
1812    /home/sl6/S3401636/Lab 8 - Results and Report Analysis(2).pdf
1924    /home/sl6/S3401636/Week5a.ppt
3208    /home/sl6/S3401636/Software-Testing-Chapter-6.pdf

2 ответа2

1
  1. Это не связано с КБ и МБ в вашем примере. Вы выполняете числовую сортировку в обратном порядке. 80 и 20 больше 8,5, поэтому они показываются первыми. Буквы игнорируются при сортировке. Смотрите также 4.0K, который находится прямо в середине вашего списка.

  2. find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | sort -nr | head -14 | awk '{print $2}' | xargs -l basename

  3. Самый простой способ - использовать sort -hr если ваша версия sort поддерживает это. У меня есть sort (GNU coreutils) 8.22, и он работает как шарм.

  4. Это полный список? Вы должны увидеть то же количество файлов, что и раньше, возможно, другие файлы из-за сортировки и обрезки части. Пожалуйста, укажите точную командную строку, которую вы использовали.

0

Вместо использования awk '{print $ 2}' | args -l basename, я использовал

-printf "% s% f\n"

вот так:

find ~ -maxdepth 1 -size +1024c -type f -printf "%s %f\n" | sort -nr | head -14

% f - печатает имя файла% s - печатает размер

удалены команды du, awk и xargs

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .