2011-04-28 84 views
0

查找文件我有这样的要求:具有相同名称和后缀的shell脚本

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

有人可以帮助想出一个shell脚本?如果你能帮助找到文件的一部分将是伟大的,我会管理其余的。

非常感谢!

回答

1

为此开始将特殊字符“_”

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

要计算文件后,找到并比较文件的部分

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

要查找的文件的最后部分

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

或使用find

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

我有一个像xxx_24Apr文件,xxx_25Apr ... yyy_24Apr, yyy_25Apr其中xxx和yyy可以是任何东西..我该怎么做? – 2011-04-28 10:38:32

+0

在评论中无法真正看到。在您的问题中发布您的文件名样本 – ghostdog74 2011-04-28 10:39:22

+0

我更新了问题,请参阅 – 2011-04-28 10:41:37

0

另一个用途为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) 
} 

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

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