次のファイル共有パス、ユーザー名、および権限を含むcsvファイルがあります。
"FolderName";"ADGroupOrUser";"Permissions"
\\path\1 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3; user2.user2; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4; user2.user2; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\2 - folder1; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\2 - folder1; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\2 - folder1; user2.user2; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
...
最初の3行を見るとわかるように、フォルダパスは同じですが、ユーザーは異なります。
ネットワークパスの下に6行以下に別のフォルダがありますが、親フォルダから継承されるため、ユーザーと権限は同じです。
アイデアは、ファイルからこの6行を削除することです。権限が継承されると、それ以降のすべての項目が同じユーザーと権限を持つことになります。
\\path\1 - folder 01\1 - folder2\1 - folder3
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4
この場合、最終結果は次のようになります。
"FolderName";"ADGroupOrUser";"Permissions"
\\path\1 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
bash(MacOS)を使ってファイルを処理しています。
このような
grep -v "\\path\1 - folder 01\1 - folder2*"
パスにはより多くのフォルダがあります。
\\path\1 - folder 01\1 - folder2*
その後、削除
答え1
$ { head -n 1; grep -E '^.{32};'; } < file
"FolderName";"ADGroupOrUser";"Permissions"
\\path\1 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
これが実際に必要なものではない場合は、より良い要件を提供するように質問を編集してください。
答え2
awk
次のコマンドを使用できます。
awk -F\\ 'NF<4{ print}' input_file
これは\
区切り文字として機能し、フィールド数を計算します。フィールドが4より小さい場合は印刷します。
PS投稿を編集して例を変更すると、コマンドは次のように変更されます。
awk -F\\ 'NF<6{ print}' input_file
答え3
みんなの助けに感謝します。私に合った解決策を見つけました。
grep -v "path\\\\1.-.folder.01\\\\1.-.folder2\\\\"
答え4
これを一度に実行するには、csvをMS ExcelまたはLibreOfficeにインポートし( ";"で区切られたファイルをインポートし、単純なフィルタを使用してパス内の ""文字を計算する)行を削除します。> 1 、数式を含む列を追加 - > LEN(セルファイル共有パス) - LEN(SUBSTITUTE(ファイル共有パス、 ""、""))> 1
一方、プロセスを構築する予定の場合は、SQLデータベースを使用して「;」で区切られたフィールドを持つファイルをインポートし、DELETEコマンドを使用してクエリ/ストアドプロシージャを設定します。つまり、DELETE * FROM <imported_table> WHERE LEN() - LEN(REPLACE(, "", "")) >1 構文は、生成するテーブルの構造に合わせてマテリアライズ/適用されます。