如何在googlecolab中基于python变量查找和执行

2024-07-02 04:42:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理google colaboratory,我必须根据扩展名对一些文件进行细化,例如:

!find ./ -type f -name "*.djvu" -exec file '{}' ';'

我希望有一个结果:

./file.djvu: DjVu multiple page document

但是,当我尝试混合使用bash和python来使用一个exension列表时:

for f in file_types:
  !echo "*.{f}"
  !find ./ -type f -name "*.{f}" -exec file '{}' ';'
  !echo "*.$f"
  !find ./ -type f -name "*.$f" -exec file '{}' ';'

我只得到了echo的输出,而没有得到文件的输出

*.djvu
*.djvu
*.jpg
*.jpg
*.pdf
*.pdf

如果我删除exec部分,它实际上会找到文件,因此我无法理解为什么find命令与exec组合会以某种方式失败

如果需要,我可以提供更多信息/示例


Tags: 文件nameechopdftypegooglefindmultiple
2条回答

我发现了一个难看的解决方法,将trought传递给一个文件,因此首先我用python将数组写入一个文件:

with open('/content/file_types.txt', 'w') as f:
    for ft in file_types:
      f.write(ft + '\n')

然后我在另一个单元格中从bash读取并使用它:

%%bash
filename=/content/protected_file_types.txt

while IFS= read -r f;
do
  find ./ -name "*.$f" -exec file {} ';' ;
done < $filename

这样我就不会像另一个answer的评论中建议的那样,在同一个单元格中混合使用bash和python

我希望找到一个更好的解决方案,可能使用一些我不知道的技巧

这对我有用

declare -a my_array=("pdf" "py")

for i in ${my_array[*]}; do find ./ -type f -name "*.$i" -exec file '{}' ';'; done;

相关问题 更多 >