4

Возможный дубликат:
Могу ли я сохранить. и ... вне. * расширение?

Я знаю о

mv * ~/whatever
mv .* ~/whatever

но это пытается двигаться . и .. , который только что причинил мне кучу боли. Есть ли способ скопировать все файлы, включая файлы .* , Но исключить текущий каталог и его родитель?

5 ответов5

7

Просто скажите bash, что есть второй символ, и это не точка. Однако не будет перемещать файлы с именами, такими как ..file .

mv .[^.]* somewhere/
7

Из руководства Bash, раздел shopt :

dotglob     If set, bash includes filenames beginning with a `.' in the results
            of pathname expansion.

shopt может использоваться для установки определенных "опций оболочки", как описано в руководстве. Смотри, man bash .

таким образом

shopt -s dotglob
mv * ~/whatever

делает то, что вы хотите. Проверьте это, например,

shopt -s dotglob
ls -d *

чтобы увидеть, какие файлы совпадают.

Так как это де-факто способ Bash согласно руководству, не должно быть никаких скрытых сюрпризов в отношении файлов с хитрыми именами. Если это так, то это по определению ошибка в Bash.

0

Попробуй это:

mv .[a-zA-Z0-9]* ~/whatever

Если у вас нет файлов точек, начинающихся с ._ или других не алфавитно-цифровых символов, он должен получить их все.

0

Если вы не хотите перемещать каталоги, все файлы будут перемещены в ./foo/:

$ find . -type f  | while read n; do mv "$n" foo/; done

Если вам также нужно сделать каталоги, попробуйте:

$ find . | grep -vP '^\.$' | while read n; do mv "$n" foo/; done
0

Используйте находку, которая исключает . и ..:

find . -name ".*" -mindepth 1 -maxdepth 1

и проверьте результат. Переместить файлы

find . -name ".*" -mindepth 1 -maxdepth 1 -exec mv {} ~/whatever \;

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