我有一个如下所示的目录结构:
/images
/1
/.tmp
image1.jpg
image2.jpg
/2
.tmp
image1.jpg
image2.jpg
image3.jpg
/3
.tmp
image1.jpg
image2.jpg
我需要的是将.tmp中的所有文件上移一级,因此它们的路径为images/1/image1.jpg
而不是images/1/.tmp/image1.jpg
。问题是我有数百或数千个这些编号的文件夹,所以手工完成它将需要永远。
是否有OS X或Unix shell命令,我可以遍历每个/.tmp文件夹并将内容移动到某个级别,或类似:
mv images/*/.tmp/* images/< the current dir being iterated over>/*
答案 0 :(得分:3)
如果您的find
支持-execdir
命令(OSX's find
apparently does),那么您可以这样做:
find . -iname '*.jpg' -execdir mv {} .. \;
-execdir
从找到该文件的目录运行该命令,因此..
将引用该文件的目录的父目录。
您可以对此进行优化以强制匹配.tmp
目录:
find . -path '*/.tmp/*.jpg' -execdir mv {} .. \;
但是,*
中的-path
也与/
匹配,因此这也会匹配,例如images/.tmp/foo/image.jpg
。
你可以这样做:
find . -type d -name .tmp -print0 | xargs -0I_ find _ -maxdepth 1 -name '*.jpg' -execdir mv {} .. \;
或者,使用find
的正则表达式支持:
find . -regex '.*/\.tmp/[^/]*\.jpg' -execdir mv {} .. \;
答案 1 :(得分:0)
从头开始,未经测试:
let list :NSArray = [
GameInfo(gameStatus: "*", country: "Italy", isSelected: true),
GameInfo(gameStatus: "1/2/21", country: "France", isSelected: true),
GameInfo(gameStatus: "1-0", country: "UK", isSelected: true),
GameInfo(gameStatus: "*", country: "Germany", isSelected: false),
GameInfo(gameStatus: "0-1", country: "Italy", isSelected: true),
GameInfo(gameStatus: "1/2-1/2", country: "UK", isSelected: false)
]
let isSelectedDescriptor: NSSortDescriptor = NSSortDescriptor(key: "isSelected", ascending: false)
let gameStatusDescriptor: NSSortDescriptor = NSSortDescriptor(key: "gameStatus", ascending: true)
let countryDescriptor: NSSortDescriptor = NSSortDescriptor(key: "country", ascending: true)
let sortedResults: NSArray = list.sortedArrayUsingDescriptors([isSelectedDescriptor,gameStatusDescriptor,countryDescriptor])
dump(sortedResults)