从类似数组的列表中选择(不带数字名称)

从类似数组的列表中选择(不带数字名称)

在我ls看到列表之后,有没有办法在不输入文档名称的情况下处理文档?

例如,除了输入rm damnSoLongFileName,我还可以输入类似的内容rm [1]吗?

我的意思是有没有办法使用ls类似数组?

答案1

以下是一行代码:

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

或者使用select

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

您可以替换echorm,它会删除您选择的项目。然后您可以按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

答案2

您可以使用制表符补全来处理长文件名。例如,输入类似 的内容rm damn<TAB>

答案3

从“我的意思是有没有办法使用像数组一样的 ls?”部分,我会假设问题只是将 ls 结果流式传输到其他命令中,因此我使用以下链接回复韋爾斯以及它的一个简单用法示例:

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

查看man find有关如何使用find命令查找、过滤和流式传输结果的更多信息以及man xargs有关 xargs 的完整手册。上述示例是-print0 + -0使用管道在两者之间组合参数的简单经典案例。

答案4

毫无疑问这是非正统的,但如果您将下面的脚本复制到一个空文件中,将其保存为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)

相关内容