我正在尝试将“查找”文件搜索的输出与字典单词进行比较,以便查找特定的隐藏文件。如果隐藏文件名是字典单词,我会被提示删除它,当且仅当它是字典单词时。
这是我到目前为止所拥有的......
find . \( -iname '*~' -o -iname '.*' \) -type f -exec sudo rm -i '{}' \;
我以为我可以使用/ usr / share / dict / words中的词典单词,但我不确定这是否是最好/最简单的选项。
我对上述代码的性能非常满意。它唯一缺少的是与字典词的比较。
提前感谢您的帮助!
奖励积分:我不完全确定为什么需要'*〜'。
答案 0 :(得分:1)
我不确定您是否可以与find
进行此类比较。但是,您可以尝试以下方式:
find
命令的输出来创建文件。$ ls -lart
total 0
drwxr-xr-x 12 jaypalsingh staff 408 Jun 19 00:53 ..
drwxr-xr-x 2 jaypalsingh staff 68 Jun 19 00:53 .
$ touch .help .yeah .notinmydictionary
$ ls -lart
total 0
drwxr-xr-x 12 jaypalsingh staff 408 Jun 19 00:53 ..
-rw-r--r-- 1 jaypalsingh staff 0 Jun 19 00:54 .yeah
-rw-r--r-- 1 jaypalsingh staff 0 Jun 19 00:54 .notinmydictionary
-rw-r--r-- 1 jaypalsingh staff 0 Jun 19 00:54 .help
drwxr-xr-x 5 jaypalsingh staff 170 Jun 19 00:54 .
$ find . \( -iname '*~' -o -iname '.*' \) -type f > myhiddenfile.list
$ cat myhiddenfile.list
./.help
./.notinmydictionary
./.yeah
awk
命令$ awk -F'/' 'NR==FNR{a[substr($NF,2)]=$0;next}{for(x in a){if(x == $1)system("rm \-i "a[x])}}' myhiddenfile.list /usr/share/dict/words
remove ./.help? y
remove ./.yeah? y
$ ls -lart
total 8
drwxr-xr-x 12 jaypalsingh staff 408 Jun 19 00:53 ..
-rw-r--r-- 1 jaypalsingh staff 0 Jun 19 00:54 .notinmydictionary
-rw-r--r-- 1 jaypalsingh staff 37 Jun 19 00:54 myhiddenfile.list
drwxr-xr-x 4 jaypalsingh staff 136 Jun 19 01:07 .
awk
命令的说明:# Set the field separator to "/"
awk -F'/' '
NR==FNR {
# Slurp your hidden file list in to an array (index is filename;value is complete path)
a[substr($NF,2)]=$0
# Keep doing this action until all files are stored in array
next
}
{
# Iterate over the array
for(x in a) {
# If the filename matches a word in your dictionary
if(x == $1) {
# execute the rm command to delete it
system("rm \-i "a[x])
}
}
}' myhiddenfile.list /usr/share/dict/words
注意:这适用于没有扩展名的文件名。对于具有.help.txt
扩展名的文件名,需要执行其他步骤来解析文件名,以便对字典执行查找。