조건부 파일/디렉토리삭제 스크립트 생성을 도와주시기 바랍니다.

shari83의 이미지

현재
1. 윈도우 2012 R2에서 NAS서버 운영중
2. NAS서버 내의 "F:\share\ID\" 폴더를 각 사용자에게 AD를 통해서 부여함
* 사용자의 경로는 "D:\" 임
4. powershell을 통해서 매일 00시 "F:\share\ID\"폴더내의 *.url을 제외하고 모두 삭제하고 있음

문제점
1. WINAPI 이슈로 인하여 파일/디렉토리명 제한이 260자를 넘어가지 못함
2. 사용자의 경로와 NAS 서버의 경로 길이가 상이하여 NAS서버에서 파일/디렉토리를 컨트롤하지 못하는 상황이 발생함

필요사항
1. 테스트 결과 리눅스에서 해당폴더("F:\share\ID\..." )를 연결한뒤 삭제등의 컨트롤이 가능함
2. 상기 powershell에서 구현된 기능을 리눅스 스크립트를 통해서 구현하고 싶음.
3. 빈디렉토리도 가능하면 삭제하고 싶음

정리
----
쉽게 이야기 해서 리눅스에서 *.url과 ID폴더를 제외하고 모든파일/빈디렉토리를 스크립틀 통해서 삭제하고 싶습니다.
----

powershell 스크립트중 일부

foreach($item in $NasPath.dicData.GetEnumerator())
{

$fileS = Get-ChildItem -literalpath $item.VOL_PATH -Force -recurse -Exclude *.url

foreach( $file in $fileS)
{
try
{

if($file.fullname -like $item.VOL_PATH+'\Favorites*' -and $file.mode -like '*d*' )
{

}
else
{
remove-item -literalpath $file.fullname -force -recurse -ErrorAction Stop | sort-object mode -descending
#Write-host $file.fullname

}
}
catch [System.Management.Automation.ItemNotFoundException]
{

}
catch
{
$Type = 'D' #dir
if($file.mode -like '*a*')
{
$Type = 'F' #file
}

$vmClientData = New-Object 'system.collections.generic.dictionary[[string],[string]]'
$vmClientData.add("SAMACCOUNT_NAME", $item.SAMACCOUNT_NAME)
$vmClientData.add("DOMAIN", $item.DOMAIN)
$vmClientData.add("PATH_FILE_NAME", $file.fullname)
$vmClientData.add("ERROR_MSG", $_.Exception.Message)
$vmClientData.add("TYPE", $Type)

$proxy.AutoInf('II_NAS_01', $vmClientData);

}
}
}

도움 부탁드립니다. 감사합니다.

shari83의 이미지

-empty와 -mindepth, -not -name 을 조합해서 해결 가능했네요!

find 자체 기능이 워낙에 뛰어나군요^^

find . -type f -not -name "*.url" -delete