Замените escape-последовательность \ w
в обычном PS1
на \ W
. Таким образом, в вашем примере это будет примерно так:
PS1='\u@\h \W\$ '
Если я правильно понял ваш вопрос, вы хотите увидеть список владельцев крупнейших каталогов (в порядке убывания ). Другими словами:
Если вы хотите увидеть вывод в формате ls -l
, попробуйте это:
(du -sh./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }' | sort --key=5,5hr
Пример вывода:
drwxrwxrwx 1 root root 1017G Jun 20 15:44 Raw_data_files
drwxrwxrwx 1 root root 188G May 12 11:34 Old_data
drwxrwxrwx 1 root root 8.8G Jul 12 15:28 backups
drwxrwxrwx 1 root root 1.4G Jun 29 15:32 randomized_sets
-rwxrwxrwx 1 root root 124M May 22 10:41 archive_web.html.7z
-rwxrwxrwx 1 root root 113M Jan 15 14:51 example1.tif
-rwxrwxrwx 1 root root 113M Apr 15 13:27 example3.pdf
-rwxrwxrwx 1 root root 1.0M Apr 15 09:17 sample_info.xlsx
-rwxrwxrwx 1 root root 1.0M Apr 27 09:20 sample_info2.xlsx
-rwxrwxrwx 1 root root 1.0M Jun 12 09:18 sample_run.R
Как видите, это дает вам отсортированный список (на основе размера )всех каталогов и файлов. Но вас интересуют только каталоги/папки, их размер и идентификатор пользователя. Поэтому, если вы добавите простой канал ко всему этому (команде выше )и используете команду grep
(, т.е. добавите | grep "^d" --color=never"
к команде выше ), вы получите только перечисленные каталоги, и файлы больше не будут перечислены.
drwxrwxrwx 1 root root 1017G Jun 20 15:44 Raw_data_files
drwxrwxrwx 1 root root 188G May 12 11:34 Old_data
drwxrwxrwx 1 root root 8.8G Jul 12 15:28 backups
drwxrwxrwx 1 root root 1.4G Jun 29 15:32 randomized_sets
Таким образом, в этом случае полная команда будет выглядеть следующим образом:
(du -sh./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }' | sort --key=5,5hr | grep "^d" --color=never"
Все, что вам нужно сделать дальше, это добавить head -20
к команде выше, чтобы увидеть только 20 самых больших каталогов.
Все кредиты принадлежат пользователю Stack OverflowSebi. См. эту ветку на SO для получения дополнительной информации:Использование ls для вывода списка каталогов и их общего размера
Чтобы сохранить результат команды в переменной, вам просто нужно обернуть команду между ``или $():
yourvar=`date +%Y`
или
yourvar=$(date +%Y)
yourvar будет иметь значение текущего года (2018 ). Вы также можете выполнить результат прямо в своей команде:
ls -la| grep `date +%Y`
или
ls -la| grep $(date +%Y)
Чтобы добиться желаемого, я бы использовал цикл for:
for i in `du -h |sort -rh|awk '{print $2}'|sed "s/.\///g"`;do ls -la |grep $i|awk '{print $3 " " $9}';done
Имейте в виду, что команда является грубым примером, и ее, возможно, придется подправить, чтобы избежать дублирования (, поскольку, если в вашем каталоге есть подкаталоги, у вас будут разные выходные данные для одного и того же родителя ).