循环遍历目录中的所有文件

发布于 2024-12-21 09:48:21 字数 71 浏览 0 评论 0原文

我想编写一个 shell 脚本,它将循环遍历目录中的所有文件并回显“put ${filename}”。有人能指出我正确的方向吗?

I want to write a shell script that will loop through all the files in a directory and echo "put ${filename}". Can anyone point me in the right direction?

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

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

发布评论

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

评论(6

壹場煙雨 2024-12-28 09:48:22

递归(包括子目录中的文件)

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

非递归(仅该目录中的文件)

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

使用 * 而不是 YOUR_DIR 搜索当前目录

Recursively (including files in subdirectories)

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

Non-recursively (only files in that directory)

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

Use * instead of YOUR_DIR to search the current directory

旧城空念 2024-12-28 09:48:22

对于当前目录中的所有文件夹和文件

for file in *; do
    echo "put $file"
done

或者,如果您只想包含子目录和文件:

find . -type f -exec echo put {} \;

如果您想包含文件夹本身,请取出 -type f 部分。

For all folders and files in the current directory

for file in *; do
    echo "put $file"
done

Or, if you want to include subdirectories and files only:

find . -type f -exec echo put {} \;

If you want to include the folders themselves, take out the -type f part.

゛清羽墨安 2024-12-28 09:48:22

如果您没有任何文件,那么我们可以这样做,而不是打印*。

format=*.txt
for i in $format;
do
 if [[ "$i" == "$format" ]]
 then
    echo "No Files"
 else
    echo "file name $i"
 fi
done

If you don't have any files, then instead of printing * we can do this.

format=*.txt
for i in $format;
do
 if [[ "$i" == "$format" ]]
 then
    echo "No Files"
 else
    echo "file name $i"
 fi
done
梦冥 2024-12-28 09:48:22

另一种使用 lssed 的替代方法:

$ ls -1 <dir> | sed -e 's/^/put /'

以及使用 lsxargs

$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'

One more alternative using ls and sed:

$ ls -1 <dir> | sed -e 's/^/put /'

and using ls and xargs:

$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'
自在安然 2024-12-28 09:48:22

如果其中有任何子目录和文件,这也将递归地工作:

find . -type f|awk -F"/" '{print "put ",$NF}'

this will work also recursively if you have any sub directories and files inside them:

find . -type f|awk -F"/" '{print "put ",$NF}'
愿得七秒忆 2024-12-28 09:48:21

对于文件和目录,不递归

for filename in *; do echo "put ${filename}"; done

仅对于文件(不包括文件夹),不递归

for file in *; do 
    if [ -f "$file" ]; then 
        echo "$file" 
    fi 
done

对于递归解决方案,请参阅 Bennet Yee 的回答。

For files and directories, not recursive

for filename in *; do echo "put ${filename}"; done

For files only (excludes folders), not recursive

for file in *; do 
    if [ -f "$file" ]; then 
        echo "$file" 
    fi 
done

For a recursive solution, see Bennet Yee's answer.

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