о работе в bash
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 5
- ОС: winxpsp3
о работе в bash
Здравствуйте.
Работаю с удаленным сервером чрез ssh, все более менее получается (примитивные вещи типа перемещения, удаления, редактирования файлов и папок), но есть пара вопроссов.
Например есть папка, в ней файлы.
Какую комманду надо ввести чтобы удалить в ней все файлы\папки и оставить только один нужный, мне каталог или файл?
Чувствую что это как-то можно сделать не перечисляя все файлы, но не знаю как )
Читал ман но что-то так и не выходит, подскажите на примере плс
Работаю с удаленным сервером чрез ssh, все более менее получается (примитивные вещи типа перемещения, удаления, редактирования файлов и папок), но есть пара вопроссов.
Например есть папка, в ней файлы.
Какую комманду надо ввести чтобы удалить в ней все файлы\папки и оставить только один нужный, мне каталог или файл?
Чувствую что это как-то можно сделать не перечисляя все файлы, но не знаю как )
Читал ман но что-то так и не выходит, подскажите на примере плс
-
- Сообщения: 160
- ОС: Debian GNU/Linux
-
- Сообщения: 143
- ОС: Debian (squeeze), Slax LiveCD
Re: о работе в bash
Удалить все файлы (и каталоги), запрашивая подтверждение на каждый файл:
Но это изврат. Тут без "find" не обойтись.
Вам сюда.
rm -rfi *
Но это изврат. Тут без "find" не обойтись.
Вам сюда.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: о работе в bash
что может быть проще???
найти все файлы кроме одного и удалить найденное!
дословно переводим на англ.
Код: Выделить всё
find . -depth \! -path "./robots.txt" -exec rm -rv {} \;
тут всё тривиально, за исключением того, что я обычно сначала пробую без -exec... мало-ли что...
И ещё про -depth - это обход подкаталогов в обратном порядке, сначала киляем все внутренности, потом подкаталог, потом сам каталог, потом...
Ну и в конце rm пытается кильнуть '.', но система её обламывает - такое удалять нельзя

в итоге остаётся только текущий каталог и нужный файл.
PS: мне тут попалась немного другая задача - нужные файлы были не в текущем, а в подкаталогах - думать было лень,
я кильнул только файлы (-type f), а потом кильнул все пустые каталоги (-depth -type f -empty). остались только каталоги с нужными файлами.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: о работе в bash
там тоже изврат. к тому-же несколько более сложный случай обсуждается. в данном случае нет никакой надобности ни в циклах, ни тем-боле в моих извращенских sed-скриптах ;)
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: о работе в bash
$ rm !(нужный_файл)
поначалу лучше предварительно сделать команду ls с тем же аргументом. чтоб видно было, что удалится именно то, что нужно:
$ ls !(нужный_файл)
p.s. это bash. не sh, не zsh, не csh, не и т.д.
p.p.s. естественно, можно и маски использовать: ls !(*.png)
p.p.p.s. man bash. есть что почитать.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 4459
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: о работе в bash
Код: Выделить всё
mv {,.}имя_файла
rm *
mv {.,}имя_файла

-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: о работе в bash
Rootlexx
$ ls -a
. ..
$ touch .file
$ ls -a
. .. .file
$ rm *
$ ls -a
. ..
гыгы.
p.s. описана вполне реальная ситуация.
$ ls -a
. ..
$ touch .file
$ ls -a
. .. .file
$ rm *
$ ls -a
. ..
гыгы.
p.s. описана вполне реальная ситуация.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 5
- ОС: winxpsp3
Re: о работе в bash
воспользовался способом nigga, получилось)
спасибо за ссылку, там хорошее вики где описан смысл непонятных мне {}\|""~`` )))
а не скажете как бы перетащить\скопировать папку\файл на каталог выше? Например у меня есть папка test в папке forum которая, в свою очередь, лежит в папке site, как мне, находясь в каталоге forum, переместить\скопировать папку test в папку site? (извините за дурацкий вопр))
спасибо за ссылку, там хорошее вики где описан смысл непонятных мне {}\|""~`` )))
а не скажете как бы перетащить\скопировать папку\файл на каталог выше? Например у меня есть папка test в папке forum которая, в свою очередь, лежит в папке site, как мне, находясь в каталоге forum, переместить\скопировать папку test в папку site? (извините за дурацкий вопр))
-
- Сообщения: 1685
- ОС: SuSe 10.2
Re: о работе в bash
<offtop>предлагаю автору поставить на удаленном сервере MC</offtop> ^_^
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: о работе в bash
Код: Выделить всё
cp file ../
cp -r dir ../
mv file ../
mv dir ../
Код: Выделить всё
[00:09]deb:~ $ mkdir -p site/forum/test
[00:09]deb:~ $ cd site/forum
[00:09]deb:~/site/forum $ pwd
/home/user/site/forum
[00:09]deb:~/site/forum $ ls
test
[00:09]deb:~/site/forum $ mv test ../
[00:10]deb:~/site/forum $ ls
[00:10]deb:~/site/forum $ ls ../
forum test
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 5
- ОС: winxpsp3
Re: о работе в bash
миднайт поставить наверно можно, но хочется пошире раскрыть для себя потенциал консоли, интуитивно чую что он великъ )
SLEDopit писал(а): ↑11.09.2009 00:11Код: Выделить всё
cp file ../ cp -r dir ../ mv file ../ mv dir ../
Код: Выделить всё
[00:09]deb:~ $ mkdir -p site/forum/test [00:09]deb:~ $ cd site/forum [00:09]deb:~/site/forum $ pwd /home/user/site/forum [00:09]deb:~/site/forum $ ls test [00:09]deb:~/site/forum $ mv test ../ [00:10]deb:~/site/forum $ ls [00:10]deb:~/site/forum $ ls ../ forum test
благодарю за оперативность, оказалось оч просто
-
- Бывший модератор
- Сообщения: 4459
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: о работе в bash
Код: Выделить всё
alexey@desktop:~/Видео$ ls -a
. ..
alexey@desktop:~/Видео$ touch .test
alexey@desktop:~/Видео$ ls -a
. .. .test
alexey@desktop:~/Видео$ rm *
rm: невозможно удалить `*': No such file or directory
alexey@desktop:~/Видео$ ls -a
. .. .test
alexey@desktop:~/Видео$ shopt dotglob
dotglob off
alexey@desktop:~/Видео$
Таки всё нормально. Не у всех опция dotglob установлена.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: о работе в bash
ну-у, так нечестно (улыбка). я ждал другого ответа: «не может быть!»
p.s. а shopt -s dotglob я тоже по умолчанию нигде не использую. но иногда случается необходимость…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: о работе в bash
Код: Выделить всё
cp -rv site/forum/test site
оригинально. я делал не так,
Код: Выделить всё
mv file.xxx ..; rm *; mv ../file.xxx .
вот тем-то она и опасна...

-
- Сообщения: 847
- ОС: archlinux
Re: о работе в bash
Но такой подход не работает в /drBatty писал(а): ↑11.09.2009 09:22
оригинально. я делал не так,Код: Выделить всё
mv file.xxx ..; rm *; mv ../file.xxx .

А можно я тоже тогда спрошу - как удалить/скопировать/переместить все файлы, включая скрытые? А то ".*" включает ".."

-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: о работе в bash
вы в корне делаете rm *?
оригинально...
.* включает ТОЛЬКО скрытые, ВСЕ файлы включает шаблон
Код: Выделить всё
* .*
.. и . тоже относится к файлам, что в этом такого? обычные файлы, что вам не нравится? то-что они сами создаются, и их не удаляет rm -r ? ну и что? копируются они прекрасно, так-же там можно искать. Не нравится - исключите. Выше есть 4+ варианта - как это делать.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: о работе в bash
Насколько я помню, сначала нужно shopt -s extglob (у меня в .basrc прописано).sash-kan писал(а): ↑10.09.2009 21:42$ rm !(нужный_файл)
поначалу лучше предварительно сделать команду ls с тем же аргументом. чтоб видно было, что удалится именно то, что нужно:
$ ls !(нужный_файл)
p.s. это bash. не sh, не zsh, не csh, не и т.д.
p.p.s. естественно, можно и маски использовать: ls !(*.png)
p.p.p.s. man bash. есть что почитать.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: о работе в bash
Правильно чуете. Вообще, mc -- костыль для тех, кто не хочет освоить нормальную полноценную работу в командной строке. Т.е. в отдельных редких случаях может быть оправдано разово им воспользоваться (например, мне как-то понадобилось для работы с файлами, имевшими иноязычные имена, т.е. с буквами, которых нет в моих раскладках клавиатуры), но для постоянной работы он непригоден.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: о работе в bash
Есть один частовстречающийся вариант: .[^.]*drBatty писал(а): ↑11.09.2009 10:47.* включает ТОЛЬКО скрытые, ВСЕ файлы включает шаблон(и пробелы и точки - важны!)Код: Выделить всё
* .*
.. и . тоже относится к файлам, что в этом такого? обычные файлы, что вам не нравится? то-что они сами создаются, и их не удаляет rm -r ? ну и что? копируются они прекрасно, так-же там можно искать. Не нравится - исключите. Выше есть 4+ варианта - как это делать.
На самом деле он не совсем корректен, т.к. под него не подпадают _все_ имена, начинающиеся с двух точек. Правильнее будет так: .[^.]* ..?*
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: о работе в bash
в /etc/bash_completion присутстует включение этой опции.
кстати, ещё вариант:
$ GLOBIGNORE=*.png:*.gif
$ rm *
удалит все файлы кроме имеющих суффиксы .png и .gif. кстати, дот-файлы тоже попадут под паттерн «*» и будут удалены.
и вообще наличие этой переменной (даже пустой) действует аналогично shopt -s dotglob (вот вам пятый или какой там по счёту вариант).
т.е., когда нужно «вернуться назад», надо не просто
$ GLOBIGNORE=
а
$ unset GLOBIGNORE
(или GLOBIGNORE=.* — умолчальное поведение шелла).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: о работе в bash
для таких редких случаев можно воспользоваться readline-вским шорткатом M-* (alt+* либо escape, затем *). в строку редактирования будут подставлены все возможные на данном этапе комплишены.
пример:
$ ls
fileႡႢ.pdf fileႣႤႥ.pdf
набираю команду (не нажимая в конце enter):
$ ls file
в этот момент нажимаю alt+* и командная строка приобретает вид:
$ ls fileႡႢ.pdf fileႣႤႥ.pdf
вывод: даже для такого редкого случая файловый менеджер не нужен.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Спасибо сказали:
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: о работе в bash
t.t писал(а): ↑11.09.2009 12:58Правильно чуете. Вообще, mc -- костыль для тех, кто не хочет освоить нормальную полноценную работу в командной строке. Т.е. в отдельных редких случаях может быть оправдано разово им воспользоваться (например, мне как-то понадобилось для работы с файлами, имевшими иноязычные имена, т.е. с буквами, которых нет в моих раскладках клавиатуры), но для постоянной работы он непригоден.
+1
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: о работе в bash
Спасибо, давно туда не заглядывал. Впрочем, .bashrc у меня кочует с машины на машину ещё с woody. Сегодня обнаружил там комментарий в koi8. (:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: о работе в bash
Я ведь не сказал "может быть необходим", а сказал "в отдельных редких случаях может быть оправдано разово им воспользоваться". В том конкретном случае файлов было много, а обрабатывать их нужно было выборочно -- потому гораздо быстрее было ткнуть на кнопку в mc, нежели удалять из комстроки лишние подстановки. Именно для таких редких случаев его для подстраховки и держу: когда использование универсальных решений или создание специализированных элементарно не оправдано. Как постоянный инструмент считаю mc вредным.sash-kan писал(а): ↑11.09.2009 17:48для таких редких случаев можно воспользоваться readline-вским шорткатом M-* (alt+* либо escape, затем *). в строку редактирования будут подставлены все возможные на данном этапе комплишены.
пример:
$ ls
file**.pdf file***.pdf
набираю команду (не нажимая в конце enter):
$ ls file
в этот момент нажимаю alt+* и командная строка приобретает вид:
$ ls file**.pdf file***.pdf
вывод: даже для такого редкого случая файловый менеджер не нужен.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 847
- ОС: archlinux
-
- Сообщения: 5
- ОС: winxpsp3
Re: о работе в bash
Еще раз благодарю за все представленные решения, возник еще такой вопрос - как раздать нужные права папке, чтобы это также касалось всех подпапок и\или файлов? И как быть, если например надо раздать одни права тем подпапкам\файлам, а другие иным?
-
- Сообщения: 847
- ОС: archlinux
Re: о работе в bash
как раздать нужные права папке, чтобы это также касалось всех подпапок и\или файлов?
Код: Выделить всё
chown 755 папко -R
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: о работе в bash
не, регулярным файлам +x поставится...
find . -type f -exec chmod 644 {} \; -o -type d -exec chmod 755 {} \;
что-то такое пойдёт, хотя я не проверил...
у мну есть на другой машине алиас, только я не помню что-там. А простого способа, к сожалению, я не знаю.