我正在编写一个 .sh 脚本,该脚本允许我有选择地挑选文件夹中的文件,然后将这些文件作为变量传递到脚本中,.sh
以便我可以在其上进行编辑。
#!/bin/bash
filesList=""
for file in $(ls -1v *.MP4);do #lists even numbered file
filesList="${filesList}${file}|"
done
filesList=${filesList%?} # removes trailing pipe
ffmpeg -i "concat:$filesList" -c copy ../$(date +%Y%m%d_%H%M%S)_merged.mp4
目前我有上述脚本,但有时有些*.MP4
文件我不想包含在作业中。
答案1
这可能不是您的问题的直接解决方案,但有时值得探索替代方法。
如果您想以交互方式选择文件并将其导入脚本,请查看fzf
。您可以使用它从文件列表中选择单个文件,然后处理输出。例如:
find . -type f -iname '*.mp4' | fzf -m
这将向您显示一个文件列表,您可以对其进行模糊搜索(通过输入字母),并使用Tab或进行标记/取消标记ShiftTab。
按下后Enter,您将获得一个以换行符分隔的文件名列表,您可以将其通过管道传输到另一个程序,例如xargs
您自己的 shell 脚本。
我主要用fzf
它来扩展**
文件的递归列表以进行模糊查找,以及它的CtrlR功能,它让我可以以模糊的方式搜索命令历史记录。
因此,您也可以尝试启用键盘快捷键,然后键入简单的**
,然后Tab启动fzf
。
答案2
排除任意文件的一般方法可能是这样的:
- 创建项目目录 –
mkdir pdir
。 - 硬链接您的脚本将对其操作的所有文件 –
cp -l -- *.MP4 pdir/
。 - 进入目录 –
cd pdir
。 - 使用
rm
、mc
、vidir
或dolphin
任何其他方式删除要排除的文件。您还可以重命名文件(以影响排序)。 - 运行脚本。
- 将结果保存到其他地方。
- 离开项目目录并将其删除(连同其内容)。
在原始目录中,所有文件仍保留其原始名称。
笔记: