Выбор из списка вроде массива (без имени по номеру)

Загрузите и скомпилируйте Python (с терминалом):

wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2
tar jxf ./Python-3.3.0.tar.bz2
cd ./Python-3.3.0
./configure --prefix=/opt/python3.3
make && sudo make install

Источник: AskUbuntu

1
задан 16 December 2014 в 18:04

3 ответа

Вы можете использовать табуляцию для длинных имен файлов. Для вашего примера введите что-то вроде rm damn<TAB>.

2
ответ дан 24 May 2018 в 00:56

Из «Я имею в виду, что все равно использовать ls как массив?» часть, я предполагаю, что вопрос состоит в просто потоке результатов ls в какую-то другую команду, таким образом, я отвечаю ссылкой на Xargs и простым примером ее использования:

find -name '*.txt' -print0 | xargs -0 rm

Проверить man find для получения дополнительной информации о том, как найти, фильтровать и передать результаты с помощью команды find и man xargs для полного руководства о xargs. Вышеприведенный пример представляет собой простой классический случай комбинации -print0 + -0 аргументов между двумя используемыми трубами.

1
ответ дан 24 May 2018 в 00:56

Несомненно, неортодоксально, но если вы скопируете сценарий ниже в пустой файл, сохраните его как ls_2 в ~/bin, сделайте его исполняемым и запустите его командой (из любого места):

[ f1]

он отобразит список, например:

jacob@jacob-System-Product-Name:~/Bureaublad/all kinds of crap$ ls_2
1. nog te doen.odt
2. otto
3. GW_site_werkmap
4. sanel
5. blacklist.2
6. sanel_edited
7. sanel_gigue.mp3
8. Sprachmemo_011[1].m4a
9. PRG001
10. crap

please enter numbers to remove (separated by a comma): 1,3,5

Просто введите цифры, и элементы (оба каталога и файлы) будут удалены.

Как и "real "ls command, его можно запустить из текущего каталога (только ls_2) или с помощью каталога в качестве аргумента (ls_2 /path/to/directory).

Сценарий:

#!/usr/bin/env python3
import os
import shutil
import sys

try:
    currdir = sys.argv[1]
except IndexError:
    currdir = os.getcwd()

items = os.listdir(currdir)
for i in range(len(items)):
    print(str(i+1)+".", items[i])

remove = input("\nplease enter numbers to remove (separated by a comma): ")
indices = [int(it) for it in remove.split(",")]
for i in indices:
    file = currdir+"/"+items[i-1]
    try:
        os.remove(file)
    except IsADirectoryError:
        shutil.rmtree(file)
0
ответ дан 24 May 2018 в 00:56
  • 1
    для этого требуется нестандартный интерпретатор – Малъ Скрылевъ 16 December 2014 в 18:26
  • 2
    @ МалъСкрылевъ Нет Ubuntu без python. – Jacob Vlijm 16 December 2014 в 18:27
  • 3
    это не означает, что пользователь будет использовать его как оболочку – Малъ Скрылевъ 16 December 2014 в 18:27
  • 4
    @ МалъСкрылевъ ??? python будет вызван в любом случае, поскольку он является исполняемым и в shebang. пользователь не будет беспокоиться о чем-либо. – Jacob Vlijm 16 December 2014 в 18:29
  • 5
    @ МалъСкрылевъ Поскольку это Ask Ubuntu , мы можем предположить, что установлен python, иначе система будет нарушена. – Jacob Vlijm 16 December 2014 в 18:41

Другие вопросы по тегам:

Похожие вопросы: