我正在使用 Dropbox,最后得到了一些文件,例如:
prefs (home's conflicted copy 2009-07-20).js
我想要做的是找到所有“冲突的副本......”文件,然后将每个文件与其无冲突的版本进行比较。
例如,以下命令给出结果:
$ find . -name "*onflict*" -exec ls -ld {} \;
-rw-r--r-- 1 eric eric 24203 2009-07-19 14:42 ./prefs (home's conflicted copy 2009-07-20).js
但我想要像这样的输出:
-rw-r--r-- 1 eric eric 24429 2009-07-21 11:43 prefs.js
-rw-r--r-- 1 eric eric 24203 2009-07-19 14:42 prefs (home's conflicted copy 2009-07-20).js
然后我就可以决定如何处理冲突的副本了。有什么想法吗?
答案1
我想到了一些似乎可行的方法,但我欢迎提出改进建议,包括使其更清洁:
find . -name "*onflict*" | while read name; do ls -ld "$name"; ls -ld "${name/ (*onflict*)/}"; echo -n "$name" | xargs -0 -p rm ; echo ; done
采用更易于阅读和输入的格式:
find . -name "*onflict*" | \
while read name; do
ls -ld "$name"
ls -ld "${name/ (*onflict*)/}"
echo -n "$name" | xargs -0 -p rm
echo
done
参考:
使用 shell 对初始 find 命令的结果进行“研磨”——pipemill
http://en.wikipedia.org/wiki/Pipeline_(Unix)#Pipemill在 shell 中操作字符串
http://www.linuxjournal.com/article/8919
http://tldp.org/LDP/abs/html/string-manipulation.html#SUBSTRREPL00使用 xargs
http://en.wikipedia.org/wiki/Xargs
http://ss64.com/bash/xargs.html
答案2
匹配冲突的文件名后,使用正则表达式将括号和空格替换为星号,然后执行以下操作:
ls -d "prefs*.js"