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

После того, как я ls и см. список, должен там так или иначе обработать документ, не вводя его имя?

Например, вместо ввода rm damnSoLongFileName, я могу ввести что-то как rm [1]?

Я имею в виду, должен там так или иначе использовать ls как массив?

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

4 ответа

Вот один лайнер:

for something in $( ls );do echo $something;done

Или использование select:

select item in $( ls );do echo $item;done

Вы могли заменить echo rm, и это удалит объект, который Вы выбрали. Вы могли тогда нажать ctrl + c для остановки цикла.

Вывод:

bob@bob-p7-1298c:~$ select item in $( ls );do echo $item;done
1) adifferentlikethis    6) Documents       11) initramfs       16) MESVG20.xlsx    21) out.png     26) racket      31) t~          36) Untitled        41) VMs
2) bash_speakit      7) Downloads       12) irssi_log       17) MLGVG17.xlsx    22) output.mp3      27) run.py      32) Templates       37) Document
3) color_img.jpg     8) ec2         13) likethis        18) MLRVG17.xlsx    23) php5        28) run.sh      33) test        38) 1
4) DATES         9) examples.desktop    14) lpr         19) Music       24) Pictures        29) space.txt       34) t.sh        39) Videos
5) Desktop      10) grub.iso        15) MEEVG19.xlsx    20) nano.save       25) Public      30) t           35) Untitled-2.pd   40) VirtualBox
#? 

я тогда ввожу номер, и он повторит его назад мне.

#? 2
bash_speakit

Другая Возможность:

thearray=( $(ls) )
echo "${thearray[2]}"

Вывод:

color_img.jpg
3
ответ дан 10 November 2019 в 08:13

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

2
ответ дан 10 November 2019 в 08:13

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

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

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

1
ответ дан 10 November 2019 в 08:13

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

ls_2

это покажет список как:

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

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

Как "реальная" команда ls, это может быть выполнено из текущего каталога (просто 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
ответ дан 3 December 2019 в 06:32

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

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