如何遍历ls命令返回的某些文件名?

嗨优布

您好,我正在尝试编写一个简单的bash脚本,

我遇到的问题是我要遍历ls命令返回的第4、5、6和7个文件,然后检查这些文件是否具有写或读权限,如果有,则进行简单复制这些文件到另一个目录。到目前为止,我所做的就是检查它们是否具有所需的权限,然后将它们复制到/tmp目录中。我的解决方案:

#!/bin/sh

for f in *

do

if [ -w "$f" ] || [ -r "$f" ]; then

cp $f /tmp

fi

done

获得第4至第7个文件名的方法是通过ls | head -7 | tail -4,但是如何仅通过这些文件名专门进行迭代?基本上,我该如何做,以便*for循环中列表可以是这4个文件名?

非常感谢你。

内贾特·艾丁

不要尝试解析的输出ls请参阅为什么不应该解析ls的输出

使用globbing,将文件名存储到数组中并遍历索引从3到6(包括两者)。请注意,数组索引从中的零开始bash例如,

#!/bin/bash

files=(*)
for ((i = 3; i <= 6; ++i)); do
    if [[ -r ${files[i]} || -w ${files[i]} ]]; then
        cp "${files[i]}" /tmp
    fi
done

或使用数组切片:

files=(*)
for file in "${files[@]:3:4}"; do
    if [[ -r $file || -w $file ]]; then
        cp "$file" /tmp
    fi
done

或者,如注释中所述,可以实现一个计数器以跳过前三个文件并在第7次迭代后中断循环:

itr=0 # iteration count
for file in *; do
    ((++itr < 4)) && continue
    ((itr > 7)) && break
    [[ -r $file || -w $file ]] && cp "$file" /tmp
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使Shell识别由`ls -A`命令返回的文件名,并且这些文件名包含空格?

linux ls命令列出文件名中包含某些字符的文件

ls命令的过滤结果,仅根据格式获取某些文件名

如何仅从find命令返回文件名?

ls如何排序文件名?

返回模型文件名的命令

如何使用 find、ls 命令根据数组中的条目显示文件名?

文件名遍历

为什么ls -a命令以红色显示文件名?

从ls命令获取访问权限,文件名及其大小

如何打印askopenfilename返回的文件名?

如何从 minio (mc) ls 获取文件名

如何从ls输出中检索文件名

如何从 ls 获取全名、路径和文件名?

ls文件名如何按数字顺序在文件名中包含空格字符

运行$(myfunction)返回“ <文件名>:找不到命令”

查找在-exec命令上返回成功的文件名

如何从文件名中删除某些字符串?

如何使用“查找”忽略某些文件名?

如何使用grep获取某些文件名?

如何使emacs忽略某些特定文件名以完成操作?

如何遍历目录中的所有文件(按创建日期排序),某些文件名的名称中带有空格

使用ls terminal命令在文件名后加问号是什么意思?

ls命令查看目录中文件名中的特定字符串

结合grep命令时如何与文件名不冲突?

如何使用find命令从文件名中删除(1)

如何使用find命令获取cygwin中的文件名?

如何从 Raku 命令行获取多个文件名?

如何从Python的命令行参数获取文件名