Bash:当前目录中的任何文件

时间:2015-04-20 00:56:30

标签: bash

bash中是否有速记选择任意文件? *枚举当前目录中的所有文件,但是如果我只想要一个文件并且不关心它是什么呢?

FWIW我在一个目录中测试了几个不同的ffmpeg命令,这些命令具有类似命名的视频文件,因此tab-complete很麻烦。

2 个答案:

答案 0 :(得分:2)

这是在目录中获取第一个或随机文件的强大方法,处理没有任何文件的边缘情况:

#!/bin/bash
# Let globs expand to 0 elements instead of themselves if no matches
shopt -s nullglob  

# Add all the files in the current dir to an array
files=(*)

# Check if the array has any elements
if [[ ${#files[@]} -gt 0 ]]
then
    first_file=${files[0]}
    random_file=${files[RANDOM%${#files[@]}]}

    echo "The first file is ${first_file}"
    echo "A random file is ${random_file}"
else
    echo "There are no files in the current directory."
fi

如果您只是想要一些简短而且难以进行交互式测试的东西,您可以创建一个数组并引用它进行无索引以获得第一个具有最小类型的元素:

$ testfile=( *.avi )
$ ffmpeg -i "$testfile" test.mp3

您还可以将 Tab 绑定到zsh样式完成:

$ bind 'TAB:menu-complete'

现在,对于本次会话的其余部分,当您按 Tab 时,您将获得一个完整的文件名而不是一个前缀(再次按 Tab 以循环匹配)。这样,您只需按一下键就可以方便地选择文件。

答案 1 :(得分:0)

偶尔我使用shuf

find -name '*whatever*' | shuf | head -n 1

shuf是一个工具,是GNU coreutils的一部分,它以随机顺序打印输入行。换句话说, shuf 填补了这些界限。