Вот функция удара, которая добьется цели:
do_rename() {
oldnum=$1 # assign parameters for clarity
newnum=$2
for f in "$oldnum".*; do # get all files matching the old number
mv "$f" "$newnum"."${foo##*.}" # use a parameter expansion to get the exetension of the current filename
done
}
Воспользуйтесь преимуществами расширения скобки:
du -b maybehere*/{*,.[^.],.??*}
или альтернативно
du -b maybehere*/{,.[^.],..?}*
Логика этого, вероятно, не очевидна, поэтому вот объяснение:
*
соответствует всем не скрытым файлам . [^.]
соответствует файлам, имеющим, какие имена начинаются с одной точки, а затем не точка; То есть только 2 символа имена файлов в первой форме. . ?? *
соответствует скрытым файлам, которые находятся как минимум 3 символа ..? *
Как указано выше, но второй символ должен быть точкой , все точки - исключить Ссылки на текущий и родительский каталог (.
и ..
), но включают все нормальные файлы таким образом, чтобы каждый из них будет подсчитан только один раз!
Например, самый простой будет просто написать
du -b maybehere*/{.,}*
Это означает, что список содержит точку .
И «Ничего» (Ничего не находится между ,
и закрытие }
), таким образом, все скрытые файлы (которые запускаются с точки) и все не скрытые файлы (которые начинаются с «Ничего») будет соответствовать. Проблема в том, что это также будет соответствовать .
.. ..
, и это, скорее всего, не то, что вы хотите, поэтому нам нужно как-то исключить.
Окончательное слово о расширении скобки.
Расширение скобки - это механизм, с помощью которого вы можете включить дополнительные файлы / строки / что угодно в командную строку, написав меньше символов. Синтаксис {Word1, Word2, ...}
, I.E. Это список строк, разделенных запятыми, которая начинается из {
и конца с }
. Bash
Руководство дает очень простое и в то же время очень распространенным примером использования:
$ echo a{b,c,d}e
abe ace ade
Если вы хотите просто перечислить скрытые каталоги или работать на скрытых каталогах, то поскольку Costas сказал, что вы можете использовать
du -b, возможно, * /. *
Это позволит вам работать на скрытых файлах и каталогах. Если вы хотите только скрытые каталоги, вы можете указать, что с
DU -B может быть * /. * /
Поскольку вы уже используете специфический синтаксис GNU (-b
):
du -abd1 maybehere*/
Таким образом, du
перечислит файлы в каталогах maybehere*
(и не исключит файлы с точками). -d1
ограничивает отчет об использовании диска одним уровнем вниз (включая некаталоги с помощью -a
).
В противном случае, для включения скрытых файлов (кроме .
и ...
), каждая оболочка имеет свой собственный синтаксис:
zsh
:
du -b maybehere*/*(D)
ksh93
:
(FIGNORE='@(.|...)'; du -b maybehere*/*)
bash
:
(shopt -s dotglob; du -b maybehere*/*)
tcsh
:
(set globdot; du -b maybehere*/*)
yash
:
(set -o dot-glob; du -b maybehere*/*)
хотя учтите, что он включает .
и ...
на системах, которые включают их в результат readdir()
, что делает его едва ли пригодным для использования.
Хотя это и не оболочка напрямую, вы можете использовать find с ограниченной глубиной, как здесь
find maybehere -maxdepth 1 -exec du -sh {} \;