logo
/
Dataview リンクやフォルダなどの条件でファイルを移動する
2025-02-05
https://blacksmithgu.github.io/obsidian-dataview/annotation/metadata-pages/ でファイルのメタデータ一覧
  • Object.keys(dv.page(targetFileName).fileでも確認できる
場合に応じてqueryを変える
  • フォルダの場合: '"folder"'
  • 特定リンクを保つ場合は: [[link]]
ファイル名マッチは
  • dv.pages().file.where(page=>page.path.includes("ファイル名"))
```dataviewjs
let moveFiles = false 
let destination = "<>" + "/"

const query = "<>"

const fileList = app.vault.getFiles();

const list = dv.page(query).file.outlinks
		.where(page => !page.path.startsWith(destination))
		.map(page => fileList.find(f=>f.path === page.path))
		.where(page=>page)

if (moveFiles) {
	list
		.map(file => this.app.fileManager.renameFile((file, destination + file.name))  
}

dv.list(list.map(l=>l.path))
```
ファイル名プレフィックスをつける
```dataviewjs
let moveFiles = false 
let destination = "eat" + "/"
const prefix = ''

const fileList = app.vault.getFiles();

const list = dv.pages('[[食事-飲食店]]').file
		.where(page => !page.name.startsWith('🍴'))
		.map(page => fileList.find(f=>f.path === page.path))
		.where(page=>page)

if (moveFiles) {
	list
		.map(file => this.app.fileManager.renameFile((file, destination + prefix + file.name))  
}

dv.list(list.map(l=>l.path))
```
this.app.vault.renameだとリンク切れちゃうので注意
https://forum.obsidian.md/t/vault-rename-file-path-doesnt-trigger-link-update/32317
let moveFiles = true 
let destination = "n_private/items" + "/"
const prefix = '👜'

const fileList = app.vault.getFiles();

const list = dv.pages().file
		.where(page=>page.path.startsWith(destination))
		.where(page => !page.name.startsWith(prefix))
		.map(page => fileList.find(f=>f.path === page.path))
		.where(page=>page)

if (moveFiles) {
	list
		.map(file => this.app.fileManager.renameFile(file, destination + prefix + file.name))  
}

dv.list(list.map(l=>l.path))