【问题标题】:How to use a directory of filenames as arguments in a linux shell command如何在 linux shell 命令中使用文件名目录作为参数
【发布时间】:2020-08-17 10:47:34
【问题描述】:

我想在linux下运行下面的命令python3 pythonScript.py filename1 filename2 filename3 filename4 filenameN.....

如果我想将文件名作为列表运行,我会执行 python3 pythonScript.py $(< filenamelist.txt) 其中 filename list.txt 包含 filename1 filename2 filename3 filename4 filenameN.... 在每一行中。

有没有一种方法可以在不生成列表的情况下运行此命令,而只需将文件名目录直接输入到命令中?

【问题讨论】:

  • 您需要指定文件名是否必须保持filename1 filename2 filename3 filename4, ... filenameN 的顺序,例如filename10 将在filename2 之前使用通配等排序。

标签: bash shell command-line command-line-arguments


【解决方案1】:

你可以使用xargs:

find somefolder -maxdepth 1 -print0 |xargs -0 python3 pythonScript.py

【讨论】:

  • 嗨,我收到一个错误,因为正在解析整个目录,~/somedir/subdir 当我在查找后使用它时,有没有办法只解析子目录中的文件名?
  • -maxdepth 1 表示它将仅输出您之前设置的文件夹中的名称,并且不会在每个文件夹中递归。请给出您的文件夹结构的确切示例,以及你的目标是,你想要哪些文件,你不想得到,所以我们找到了一个解决方案..
  • 好的,我只需要 subdir 文件夹中的文件名,我运行 find ~/Documents/testing/1FilesMaker/servernames/ -maxdepth 1 -print0 |xargs -0 echo ,servernames 文件夹有我需要的文件名,但是这个命令正在打印整个目录 /Users/username/Documents/testing/1FilesMaker/servernames/servername1 我只需要servername1。能做到吗?
  • find ~/Documents/testing/1FilesMaker/servernames/ -maxdepth 1 -type f -exec basename {} \;|xargs -0 echo
  • 它也会先打印文件夹的名称,是否可以避免这种情况?
【解决方案2】:

尝试大括号扩展。

python3 pythonscript.y filename{1..10}
  • 如果您需要为变量设置N 限制,那么您需要一个循环,因为在 bash 中大括号扩展发生在变量之前。

【讨论】:

  • 如果 OP 对前缀为 filename 的文件夹中的所有文件感兴趣,则值得评论,然后只需 filename*
  • * glob 可能会根据locale 对它进行不同的排序,如果你有,说filename.txt 也将被包括在内,只是说:-)
  • 非常正确,当给出的很少时,很难知道确切的要求。
  • 带有 filename* 的命令会是什么样子,最后没有文件扩展名。
  • 正是你所拥有的。
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多