Как я указываю аргументы для возврата всех точечных файлов, но нет. и..?

Можно использовать команду

chage -d 0 [username]

для изменения пользовательской даты истечения срока, вынуждая их изменить их пароль на первом входят в систему.

Можно читать больше об этом в страницах справочника для chage и usermod.

6
14.05.2013, 21:20
6 ответов

С tcsh 6.17.01 и выше:

set globdot
du -s -- *

С более старыми:

du -s -- * .[^.]* ..?*

(интересно, который работает лучше, чем его дубликат POSIX (* .[!.]* ..?*) потому что в tcsh (и в zsh в csh эмуляция (cshnullglob опция)), вопреки оболочкам POSIX, они копируют, которые не соответствуют никакому файлу, ни до чего не расширены вместо себя),

Со стандартной находкой:

find . ! -name . -prune -exec du -s {} +

Отметьте тот GNU du имеет a -d опция ограничить глубину, на котором использовании диска dir сообщаются:

du -ad1
6
27.01.2020, 20:23
  • 1
    Интересно, у меня есть tcsh 6.17.00. Действительно, globdot не работает там. –  Mark Adler 14.05.2013, 21:24
  • 2
    du -s -- * .[^.]* ..?* работы и покрытия нечетные случаи включали пробелы в имена и точечные точечные имена. И это даже работает в ударе.Спасибо! –  Mark Adler 15.05.2013, 01:48
  • 3
    На моем du, -a не может быть объединен с -d. Однако du -d1 . добивается цели. Спасибо за это также. –  Mark Adler 15.05.2013, 01:54

Можно использовать ls-A команда для не включения в список. и.. в управляют заменой:

echo "`ls -A`"
3
27.01.2020, 20:23
  • 1
    du * будет работать, даже если будут имена с пробелами в каталоге. du `ls -A` не будет (и du "`ls -A`" не будет работать вообще). –  derobert 14.05.2013, 18:23
  • 2
    @derobert, почему...? Я попробовал du "`ls -A`" в тестовом каталоге и это, казалось, работало хорошо. –  Nykakin 14.05.2013, 18:34
  • 3
    У Вас было несколько объектов в том каталоге? Я ожидал бы, что это будет работать с 1, но сбой с 2 или больше. Я предполагаю, что его возможный tcsh делает что-то странное там... –  derobert 14.05.2013, 18:39
  • 4
    В моем случае это хорошо работало даже для /etc dir –  Nykakin 14.05.2013, 18:43
  • 5
    Действительно, Вы правы, который действительно работает в tcsh. По крайней мере, если Ваши имена файлов не содержат новые строки, который является достаточно редким что его, вероятно, игнорируемый. –  derobert 14.05.2013, 18:47

Не уверенный, если существует tcsh встроенное, но в зависимости от версии находки, Вы имеете, существует обходное решение как это:

find -maxdepth 1 -not -name '.' -exec du -s '{}' '+'

Если Ваша находка не делает -exec COMMAND {} + синтаксис, можно попробовать за -print0/xargs:

find -maxdepth 1 -not -name '.' -print0 | xargs -0 du -s
1
27.01.2020, 20:23
  • 1
    -exec {} + POSIX; -maxdepth, -not, -print0 не. –  Stéphane Chazelas 14.05.2013, 19:10

Я обычно использую:

du -ks * .[^.]*

Сюда . и .. не подобраны и это должно быть довольно портативно.

2
27.01.2020, 20:23
  • 1
    Действительно, это работает в ударе, и я думаю оболочка POSIX также. –  derobert 14.05.2013, 18:51
  • 2
    Это перестанет работать для некоторых редких случаев как ..filename. –  Nykakin 14.05.2013, 18:52

путь (но может дросселировать или иметь побочные эффекты на странных именах файлов, т.е. файлы, имя которых содержит новую строку! но также и файлы, содержащие * или a " или... Вы получаете изображение ^^. Будьте очень осторожны при использовании их способ перечислить и использовать файлы),

$ for i in * .* ; do echo $i ; done | egrep -v '^\.$|^\.\.$' > /tmp/list_files_one_by_lines
$ while read a_file ; do echo something on "${a_file}" ; done < /tmp/list_files_one_by_lines

таким образом, необходимо лучше использовать: найти

более точно:

найти.-mindepth 1-print0 | xargs-0 some_command

это то, почему:

$ find . | egrep '^\.$|^\.\.$'
.
$ find . -mindepth 1 | grep '^\.$'
$ 

и использование -print0 | xargs -0 .... позвольте заботиться о почти каждом специальные символы, которые могли произойти в имени файла (новая строка, кавычки; ctrl+z, Вы называете его),

0
27.01.2020, 20:23

Нет никакого простого универсального решения, как это - зависимый оболочки:

Для tcsh или удара:

echo .[^.]*

Для ksh:

echo .*

Однако это перестанет работать в случае Nykakin (начало файлов..)

Для более универсального ответа используйте "grep" или "найдите", как в:

ls -a|grep '^\.\(..\|[^\.]\)'

Это работает со всеми оболочками, которые я знаю, и не имеет случая Nykakin. Также работы с теми, которые после особых случаев, которые могли привести к сбою другие решения:

.x
.x.
..x.

Это означает: Запустите с точки, сопровождаемой по крайней мере 2 символами или символом, который не является точкой.

1
27.01.2020, 20:23

Теги

Похожие вопросы