После того, как я ls
и см. список, должен там так или иначе обработать документ, не вводя его имя?
Например, вместо ввода rm damnSoLongFileName
, я могу ввести что-то как rm [1]
?
Я имею в виду, должен там так или иначе использовать ls
как массив?
Вот один лайнер:
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
Вы могли использовать заполнение клавишей Tab для длинных имен файлов. Поскольку Ваш пример вводит что-то как rm damn<TAB>
.
От "Я имею в виду, должен там так или иначе использовать ls как массив?" первая часть предположила бы, что вопрос о простой потоковой передаче результатов ls в некоторую другую команду таким образом, я отвечаю со ссылкой на Xargs и простое использование в качестве примера его:
find -name '*.txt' -print0 | xargs -0 rm
Проверка man find
для получения дополнительной информации о том, как найти, отфильтруйте и передайте результаты потоком с помощью find
команда и man xargs
для полного руководства о xargs. Вышеупомянутым примером является простой классический случай -print0 + -0
комбинация споров между двумя каналами использования.
Несомненно неортодоксальный, но если Вы копируете сценарий ниже в пустой файл, сохраните его как 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)