【问题标题】:How to list files in directory using bash? [closed]如何使用 bash 列出目录中的文件? [关闭]
【发布时间】:2011-09-01 01:29:35
【问题描述】:

如何仅将目录中的常规文件(忽略子目录和链接)复制到同一目标? (Linux 上的 bash) 大量文件

【问题讨论】:

  • 这怎么跑题了?我真的很讨厌 stackoverflow 的这一部分。
  • 我怀疑合理的原因是这应该交给像超级用户这样的东西,我有点理解,但这也是一个合法的 bash 编程问题。
  • 你能改一下标题吗...这是如何复制,而不是如何列出

标签: bash


【解决方案1】:
for file in /source/directory/*
do
    if [[ -f $file ]]; then
        #copy stuff ....
    fi
done

【讨论】:

  • 它也不会尊重名称中带有空格的文件。
  • @holygeek:不,通配(路径名扩展)ARG_MAX max 的约束。命令行长度限制,因为不涉及外部实用程序。也就是说,在 Bash 中具有大量迭代的任何循环都会
  • @glennjackman:由于使用了[[ ... ]] 而不是[ ... ],因此正确处理了带有空格的文件名[[ ... ]] 不需要双引号变量引用(在大多数情况下)。
【解决方案2】:

列出/my/sourcedir/ 中的常规文件,而不是在子目录中递归查找:

find /my/sourcedir/ -type f -maxdepth 1

要将这些文件复制到/my/destination/

find /my/sourcedir/ -type f -maxdepth 1 -exec cp {} /my/destination/ \;

【讨论】:

  • 谢谢:)。我要添加 * 以获取 sourcedir 中所有文件的列表。 find /data/* -maxdepth 2 -type f
【解决方案3】:

要扩展poplitea's answer,您不必为每个文件执行 cp:使用xargs 一次复制多个文件:

find /my/sourcedir -maxdepth 1 -type f -print0 | xargs -0 cp -t /my/destination

find /my/sourcedir -maxdepth 1 -type f -exec cp -t /my/destination '{}' +

【讨论】:

  • -exec ... + 是最有效的解决方案;值得一提的是:cp -t 是一个 GNU 扩展。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 2019-04-13
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多