列出两个文件夹中的所有文件,然后随机遍历组合列表

订阅者

我有两个带有照片的目录,每次运行脚本时,我想操纵它们以输出文件的随机顺序。我将如何创建这样的列表?

d1=/home/Photos/*.jpg
d2=/mnt/JillsPC/home/Photos/*.jpg

# somehow make a combined list, files = d1 + d2
# somehow randomise the file order
# during execution of the for;do;done loop, no file should be repeated

for f in $files; do
    echo $f   # full path to each file
done
约翰·库格曼

如果你不需要,我不会使用变量。如果将几个命令与管道或进程替换链接在一起会更自然这样,一切都对数据流进行操作,而无需一次性将整个名称列表加载到内存中。

您可以使用shuf随机排列输入行,并find每行列出一个文件。或者,为了最大程度地安全,让我们使用\0分隔符。最后,带有进程替换while 循环将一行一行地读入一个变量中。

while IFS= read -d $'\0' -r file; do
    echo "$file"
done < <(find /home/Photos/ /mnt/JillsPC/home/Photos/ -name '*.jpg' -print0 | shuf -z)

也就是说,如果你确实想使用一些变量,那么你应该使用数组。数组正确处理带有空格和其他特殊字符的文件名,而常规字符串变量将它们全部弄乱。

d1=(/home/Photos/*.jpg)
d2=(/mnt/JillsPC/home/Photos/*.jpg)
files=("${d1[@]}" "${d2[@]}")

按顺序迭代很容易:

for file in "${files[@]}"; do
    echo "$file"
done

不过洗牌很棘手。shuf仍然是最好的工具,但它在数据流上效果最好。我们可以使用我们需要printf的尾随来打印每个文件名,\0以使其shuf -z满意。

d1=(/home/Photos/*.jpg)
d2=(/mnt/JillsPC/home/Photos/*.jpg)
files=("${d1[@]}" "${d2[@]}")

while IFS= read -d $'\0' -r file; do
    echo "$file"
done < <(printf '%s\0' "${files[@]}" | shuf -z)

进一步阅读:

  1. 如何逐行(和/或逐字段)读取文件(数据流、变量)?
  2. 如何查找并安全地处理包含换行符、空格或两者的文件名?
  3. 我在管道中的循环中设置变量。为什么它们在循环终止后消失?或者,为什么我不能通过管道读取数据?
  4. 如何随机化(洗牌)文件中的行顺序?或者从文件中随机选择一行,或者从目录中随机选择一个文件?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将文件夹中的所有内容复制到两个文件目标文件夹中

如何列出文件夹中的所有文件然后选择多个文件

删除目录中除两个特定文件夹外的所有内容

FOR循环遍历两个文件夹

如何列出tomcat文件夹中的所有文件?

从R中的文件夹中的所有文件中提取两个单词之间的文本

列出R中没有子文件夹的文件夹中的所有文件

循环遍历文件夹中的所有 .csv 文件

遍历Python文件夹中的所有文件

如何随机读取文件夹中的所有文件

删除除两个文件夹之外的所有 .bat 文件

拒绝除/index.php和两个文件夹以外的所有文件夹

在Haxe的文件夹中查找并列出所有文件/文件夹

列出文件夹中的所有文件以及子文件夹

列出文件夹中的所有文件ID(无子文件夹)

我如何从python中的两个列表中创建包含多个子文件夹的多个文件夹

比较两个文件夹中丢失的文件

VB.NET:在列表框中列出所有项目文件夹

遍历文件夹和子文件夹中的所有文件并获取创建日期

列出文件夹中的所有 json 文件,然后按日期排序并对其进行分页

列出目录中的所有文件夹(PHP)

列出网络位置中的所有共享文件夹

文件夹-添加两个列表的压缩元素

bash列出所有目录,子目录,文件夹,子文件夹,然后输出到单独的文件

从两个不同的文件夹中读取图像并在 csv 文件中列出带有名称的图像目录

遍历文件夹并使用文件夹名称顺序重命名每个文件夹中的所有文件

Python文件IO和zipfile。尝试遍历文件夹中的所有文件,然后使用Python遍历各个文件中的文本

PowerShell - 列出 TreeView GUI 元素中的所有文件夹和子文件夹

查找两个主文件夹之间的所有权差异?