查找具有相同名称和后缀 shell 脚本的文件

发布于 2024-11-03 16:28:20 字数 363 浏览 3 评论 0原文

我有这样的要求:

  • 查找是否存在两个同名文件(不包括日期戳)。 (例如:custom payment_24APR、custom payment_25APR)在给定目录中。我有像 xxx_24Apr,xxx_25Apr... yyy_24Apr,yyy_25Apr 这样的文件,其中 xxx 和 yyy 可以是任何内容...我该怎么做?
  • 将文件 1 中的行追加到文件 2 中。 (_24Apr 是文件 1,_25Apr 是第二个)
  • 获取以特定字符(指定字符)开头的行数。

有人可以帮忙想出一个shell脚本吗?如果您可以帮助查找文件部分,那就太好了,我将管理其余部分。

非常感谢!

I have a requirement like this:

  • find whether two files exist with the same name excluding the date stamp. (ex: custompayment_24APR, custompayment_25APR) in a given directory. I have files like xxx_24Apr,xxx_25Apr... yyy_24Apr,yyy_25Apr where xxx and yyy can be anything... How can I do that?
  • append lines from file1 to file2. (_24Apr being file 1, and _25Apr being second)
  • get the count of the lines which start with a particular character (character is specified).

Can someone help to come up with a shell script? If you can help finding the files part would be great and I will manage the rest.

Many Thanks!

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

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

发布评论

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

评论(2

天邊彩虹 2024-11-10 16:28:20

查找并比较文件部分

$ file1=custompayment_24APR
$ file2=custompayment_25APR
$ echo ${file1%%_*}
custompayment
$echo ${file2%%_*}
custompayment
$ case "${file1%%_*}" in
> "${file2%%_*}" ) echo "same";;
> esac
same

查找“_”后文件的最后部分

$ echo "_${file1##*_}"
_24APR

计算以特殊字符开头的文件

shopt -s nullglob
echo "character*" | wc -l

或使用 find

find . -type f -iname "character*" | wc -l

To find and compare the file parts

$ file1=custompayment_24APR
$ file2=custompayment_25APR
$ echo ${file1%%_*}
custompayment
$echo ${file2%%_*}
custompayment
$ case "${file1%%_*}" in
> "${file2%%_*}" ) echo "same";;
> esac
same

To find last part of the file after the "_"

$ echo "_${file1##*_}"
_24APR

To count files that start will special character

shopt -s nullglob
echo "character*" | wc -l

OR using find

find . -type f -iname "character*" | wc -l
少女净妖师 2024-11-10 16:28:20

安全查找的另一个用途:

append_duplicates_to_newest()
{
    while IFS= read -r -d '' -u 9
    do
        prefix="${REPLY%_*}"
        if [ "$prefix" = "$old_prefix" ]
        then
            cat -- "$old_file" >> "$REPLY"
        fi
        old_file="$REPLY"
        old_prefix="$prefix"
    done 9< <( find "/path/to/files/" -type f -printf '%f\0' | sort -z)
}

最后 一个问题,假设字符存储在 $char 中:

grep --count "^$char" -r /path/to/files/

Yet another use for the safe find:

append_duplicates_to_newest()
{
    while IFS= read -r -d '' -u 9
    do
        prefix="${REPLY%_*}"
        if [ "$prefix" = "$old_prefix" ]
        then
            cat -- "$old_file" >> "$REPLY"
        fi
        old_file="$REPLY"
        old_prefix="$prefix"
    done 9< <( find "/path/to/files/" -type f -printf '%f\0' | sort -z)
}

For the last issue, assuming the character is stored in $char:

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