Если я правильно понял, у вас есть такие файлы и каталоги:
$ mkdir dir{1,2,3} ; touch file{1,2,3} .file{1,2,3}
$ ls -A
.file1 .file2 .file3 dir1 dir2 dir3 file1 file2 file3
, и вы хотите переименовать каталоги в _dir1
, _dir2
, _dir3
?
То, что find
/ printf mv
выглядит выполнимым. Посмотрим, что он напечатает:
$ find . -type d -name '*' -printf "mv \"%h/%f\" \"%h/_%f\"\n"
mv "./." "./_."
mv "./dir2" "./_dir2"
mv "./dir3" "./_dir3"
mv "./dir1" "./_dir1"
Эта первая команда выдаст ошибку, так как «точка» особенная, и вы не можете ее переименовать. Но другие должны быть в порядке и должны переименовывать каталоги по вашему желанию:
$ find . -type d -name '*' -printf "mv \"%h/%f\" \"%h/_%f\"\n" | sh
mv: cannot move ‘./.’ to ‘./_.’: Device or resource busy
$ ls -d _dir*
_dir1 _dir2 _dir3
Но передавать команды в оболочку по конвейеру немного некрасиво, и если имена файлов достаточно странные, результаты будут удивительными (например, если они содержат $
, которые будут запускать замену переменной или команды в оболочке).
Если все файлы находятся на одном уровне, это должно происходить:
for x in * ; do [ -d "$x" ] && mv "$x" "_$x" ; done
(Хотя, если _ $ x
уже существует, $ x
будет перемещен в него.)
Если вы хотите включить каталоги, имена которых начинаются с точки, используйте заранее shopt -s dotglob
.
Это тоже близко:
find . -type d -exec rename 's/^/_/' {} \;
Но поскольку find
дает переименовать
пути, начинающиеся с ./
, мы должны это учитывать. Это должно происходить только на одном уровне (ведущий ./
изменяется на ./_
):
find . -type d -exec rename 's,^./,./_,' {} \;
Чтобы получить каталоги на всех уровнях, find -execdir
может быть самым простым в использовании. Он запускает команду в каталоге файла. Нам нужно -depth
, чтобы обрабатывать переименования в правильном порядке.
find . -depth -type d -execdir rename 's,^./,./_,' {} \;
Может быть, добавить ! -имя .
тоже. например
$ mkdir foo foo/dir1 foo/dir2
$ find . -depth \! -name . -type d -execdir rename 's,^./,./_,' {} \;
$ ls _foo
_dir1 _dir2
Это отображается на заставке перед выбором текстовой или графической установки. Обратите внимание на «Меню установщика Debian GNU/Linux UEFI» вверху, прямо под названием/версией по центру :
.Вот, для сравнения, старая заставка BIOS. Обратите внимание на отсутствие сообщения UEFI вверху и на другую подсветку пунктов меню. Также дополнительная опция «помощь»:
И чтобы найти этот каталог, да, загляните в оболочку. Проще всего переключиться на виртуальный терминал 2 или 3.