在我ls
看到列表之后,有没有办法在不输入文档名称的情况下处理文档?
例如,除了输入rm damnSoLongFileName
,我还可以输入类似的内容rm [1]
吗?
我的意思是有没有办法使用ls
类似数组?
答案1
以下是一行代码:
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
答案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)