Зш
mv Foo/*(DN) Bar/
або
setopt -s glob_dots
mv Foo/*(N) Bar/
(Вийдіть, (N)
якщо знаєте, що каталог не порожній.)
Баш
shopt -s dotglob nullglob
mv Foo/* Bar/
Кш93
Якщо ви знаєте, що каталог не порожній:
FIGNORE='.?(.)'
mv Foo/* Bar/
Стандарт (POSIX) ш
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Якщо ви готові дозволити mv
команді повернути статус помилки, навіть якщо це вдалося, це набагато простіше:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU знайти та GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Стандартна знахідка
Якщо ви не проти перейти до вихідного каталогу:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Ось докладніше про контроль того, чи файли крапок збігаються в bash, ksh93 та zsh.
Баш
Встановіть dotglob
опцію .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Існує також більш гнучка GLOBIGNORE
змінна , яку ви можете встановити на відокремлений двокрапкою список шаблонів, що ігноруються. Якщо не встановлено (налаштування за замовчуванням), оболонка поводиться так, як якщо б значення було порожнім, якщо dotglob
воно встановлено, і як би значення було, .*
якщо параметр не встановлено. Див. Розширення назви файлів у посібнику. Поширені каталоги .
та ..
завжди опущені, якщо тільки .
явно не узгоджено за шаблоном.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Кш93
Встановити FIGNORE
змінну . Якщо не встановлено (налаштування за замовчуванням), оболонка поводиться так, як якщо б значення було .*
. Для того, щоб ігнорувати .
і ..
вони повинні бути узгоджені в явному вигляді (керівництво в КШ 93s + 2008-01-31 станів , що .
і ..
завжди ігнорували, але це не правильно описувати реальну поведінку).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Ви можете додати файли крапок у шаблон , чітко зіставляючи їх.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Щоб розширення вийшло порожнім, якщо каталог порожній, використовуйте параметр N
відповідності шаблонів: ~(N)@(*|.[^.]*|..?*)
або ~(N:*|.[^.]*|..?*)
.
Зш
Встановіть dot_glob
опцію .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
і ..
ніколи не збігаються, навіть якщо шаблон .
явно відповідає провідному .
% echo .*
..two .one
Ви можете включити крапкові файли за певним шаблоном із D
класифікатором глобу .
% echo *(D)
..two .one none zero
Додайте N
Глоб класифікатор , щоб зробити розширення вийти порожній в порожньому каталозі: *(DN)
.
Примітка: ви можете отримати ім'я файлу результатів розширення в різних порядках (наприклад, з none
подальшим .one
подальшим ..two
) , грунтуючись на ваших налаштуваннях LC_COLLATE
, LC_ALL
і LANG
змінних.