Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用带有特定条件的数组编写用于检查目录中文件名的bash脚本_Arrays_Linux_Bash_List_File Listing - Fatal编程技术网

Arrays 使用带有特定条件的数组编写用于检查目录中文件名的bash脚本

Arrays 使用带有特定条件的数组编写用于检查目录中文件名的bash脚本,arrays,linux,bash,list,file-listing,Arrays,Linux,Bash,List,File Listing,有一个包含多个XML文件的目录 每个文件名的格式如下: yyyy-mm-dd-hh-mm-ss aufxxxxxxxxxx.xml 一些XML文件名的编号与AUF后面的编号相同,因为它们已被修改。 我想有一个bash脚本,它应该识别这些类型的文件,通过检查时间戳保留原始文件,并将修改后的文件移动到另一个文件夹。 我正试图编写bash脚本来解决这个问题。到目前为止,我得到的是: #!/bin/bash declare -a filelist shopt -s extglob for file i

有一个包含多个XML文件的目录

每个文件名的格式如下: yyyy-mm-dd-hh-mm-ss aufxxxxxxxxxx.xml

一些XML文件名的编号与AUF后面的编号相同,因为它们已被修改。 我想有一个bash脚本,它应该识别这些类型的文件,通过检查时间戳保留原始文件,并将修改后的文件移动到另一个文件夹。 我正试图编写bash脚本来解决这个问题。到目前为止,我得到的是:

#!/bin/bash
declare -a filelist
shopt -s extglob

for file in $(ls -tr1 *AUF*); do
  filelist=(${filelist[@]} "$file")
  echo "${file}"
done
部分输出:

2019-11-14-17-44-04-AUF19000276.xml
2019-11-15-09-12-01-AUF19000276.xml
2019-11-15-09-27-26-AUF19000276.xml
2019-11-15-09-28-51-AUF19000276.xml
2019-11-18-13-50-34-AUF19000296.xml
2019-11-20-16-45-14-AUF19000300.xml
2019-11-27-12-16-25-AUF19000292.xml
2019-11-27-12-19-50-AUF19000225.xml
2019-11-27-17-11-04-AUF19000300.xml
2019-11-28-09-40-44-AUF19000294.xml
2019-11-29-17-03-33-AUF19000305.xml
2019-11-29-17-04-43-AUF19000306.xml
2019-11-29-17-05-41-AUF19000306.xml
2019-12-02-12-02-20-AUF19000305.xml
2019-12-02-12-03-00-AUF19000305.xml
2019-12-03-09-22-06-AUF19000307.xml
2019-12-04-10-49-03-AUF19000308.xml
2019-12-05-09-23-54-AUF19000310.xml
2019-12-05-09-24-41-AUF19000310.xml
2019-12-09-13-12-31-AUF19000256.xml
2019-12-09-13-59-42-AUF19000256.xml
2019-12-09-15-29-25-AUF19000281.xml
2019-12-09-15-30-13-AUF19000281.xml
2019-12-09-15-34-07-AUF19000284.xml
2019-12-09-15-39-39-AUF18000346.xml
2019-12-09-15-40-21-AUF19000058.xml
2019-12-10-16-19-35-AUF19000312.xml
2019-12-11-11-58-55-AUF19000313.xml
例如:我希望保留第一个创建的文件2019-11-14-17-44-04-AUF19000276.xml,并将具有相同编号的其他三个文件移动到另一个目录

我目前不知道如何检查数组并包括上述条件。 很高兴有人帮忙

我认为以下(减去
echo
)将完成这项工作

# iterate over the AUF* parts
for i in $( ls | sed -r 's/^.*(AUF[^.]+)\.xml/\1/' | sort -u )
# iterate over the sections, move all but the first (oldest) files
do for j in $( ls -1 *${i}*| tail -n +2 )
    do echo mv $j newdir
    done
done
如果输出看起来正常,请删除
echo

我认为以下内容(减去
echo
)将完成此工作

# iterate over the AUF* parts
for i in $( ls | sed -r 's/^.*(AUF[^.]+)\.xml/\1/' | sort -u )
# iterate over the sections, move all but the first (oldest) files
do for j in $( ls -1 *${i}*| tail -n +2 )
    do echo mv $j newdir
    done
done

如果输出看起来正常,请删除回声

请尝试以下操作:

dest="another"          # folder to store the modified files
mkdir -p "$dest"
declare -A seen         # associative array to count AUFXXX substring
while IFS= read -r f; do
    auf="${f##*-}"      # extract the substring after "AUF"
    auf="${auf%.*}"     # remove extension
    (( seen[$auf]++ )) && mv -- "$f" "$dest"
                        # if the AUFXXX substring is seen then move the file
done < <(find . -name "*AUF*.xml" -printf "%T@\t%p\n" | sort -n | cut -f 2-)
dest=“另一个”#用于存储修改文件的文件夹
mkdir-p“$dest”
declare-一个seen#关联数组,用于计算AUFXXX子字符串
而IFS=read-rf;做
auf=“${f##*-}”提取“auf”后的子字符串
auf=“${auf%.*}”删除扩展名
((见[$auf]+])和&mv--“$f”$dest”
#如果看到AUFXXX子字符串,则移动文件

完成<请尝试以下操作:

dest="another"          # folder to store the modified files
mkdir -p "$dest"
declare -A seen         # associative array to count AUFXXX substring
while IFS= read -r f; do
    auf="${f##*-}"      # extract the substring after "AUF"
    auf="${auf%.*}"     # remove extension
    (( seen[$auf]++ )) && mv -- "$f" "$dest"
                        # if the AUFXXX substring is seen then move the file
done < <(find . -name "*AUF*.xml" -printf "%T@\t%p\n" | sort -n | cut -f 2-)
dest=“另一个”#用于存储修改文件的文件夹
mkdir-p“$dest”
declare-一个seen#关联数组,用于计算AUFXXX子字符串
而IFS=read-rf;做
auf=“${f##*-}”提取“auf”后的子字符串
auf=“${auf%.*}”删除扩展名
((见[$auf]+])和&mv--“$f”$dest”
#如果看到AUFXXX子字符串,则移动文件

谢谢你的大力帮助!它工作得很好。我仍然想知道,如果您使用数组解决了这个问题,并使用for循环检查它,它会是什么样子,但我认为您的方法在这个案例中更有意义:)谢谢您的帮助!它工作得很好。我仍然想知道,如果您使用数组解决了这个问题,并使用for循环检查它,它会是什么样子,但我认为您的方法在这种情况下更有意义:)