如何在某个目录中(递归)循环所有文件

发布于 2025-01-24 03:13:52 字数 300 浏览 0 评论 0原文

我的任务是在某个目录中(递归)循环浏览所有文件。目录路径在程序的第一个参数中指定。 现在,我有以下单线:

find * -type f -exec echo "put {}" \;

,但是我不知道如何将目录路径指定为第一个参数,如果没有参数,则如何剩下 *。

如果我这样做:

$YOUR_DIR = "*";
find "$YOUR_DIR" -type f -exec echo "put {}" \;

它不起作用。

请帮我。

My task is to loop through all files (recursively) in a certain directory. The directory path is specified in the first parameter of the program.
Now I have the following one-liner:

find * -type f -exec echo "put {}" \;

, but I don't know how to specify directory path as the first parameter and how left * if there are no parameters.

If I'm doing it like:

$YOUR_DIR = "*";
find "$YOUR_DIR" -type f -exec echo "put {}" \;

it isn't working.

Please, help me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泅人 2025-01-31 03:13:52

脚本的参数以数值标识为$ {1}$ {2}等(或$ 1,,$ 2 < /代码>等)。您还可以使用$ {*}(或$*)参考所有参数。但是您使用的是*,而没有前面的美元符号。这具有完全不同的含义。它的意思是“当前目录中的所有条目”。

您真的应该只使用一个目录,因此请检查第一个参数,并在使用它之前确保它是目录:

#!/bin/bash

if [ ! -d "${1}" ]; then
  echo "'${1}' is not a directory."
  exit 1
fi

find "${1}" -type f -exec echo "put {}" \;

Parameters to a script are identified numerically as ${1}, ${2}, etc. (or $1, $2, etc.). You can also refer to ALL parameters using ${*} (or $*). But you are using *, without the preceding dollar sign. This has a completely different meaning. It means 'all entries in the current directory'.

You should really just be using one directory, so check the first parameter, and make sure it is a directory before using it:

#!/bin/bash

if [ ! -d "${1}" ]; then
  echo "'${1}' is not a directory."
  exit 1
fi

find "${1}" -type f -exec echo "put {}" \;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文