jas*_*yan 5 bash find shell-script symlink
我把我所有的音乐都放在一个 1TB 的 USB 驱动器上,$HOME/Music/当我把它插入我的一台笔记本电脑时,它有一个 udev 规则来符号链接它,它确实做到了。
我遇到的问题是,在笔记本电脑上不存在目录的情况下,这可以正常工作,但它不会创建必要的树,其中存在同名 (Artist/Album/*.flac) 上的预先存在的目录笔记本电脑。
我目前运行的脚本是这样的:
#!/usr/bin/env bash
# repopulate music links when drive plugged in
shopt -s nullglob
export DISPLAY=:0
export XAUTHORITY=/home/jason/.Xauthority
music=(/media/Apollo/Music/*)
find /home/jason/Music -type l -exec rm {} \;
for dirs in "${music[@]}"; do
ln -s "$dirs" /home/jason/Music/ 2>/dev/null
done
status1=$?
mpc update &>/dev/null
status2=$?
if [[ "$status1" -eq 0 && "$status2" -eq 0 ]]; then
printf "%s\n" "Music directory updated" | dzen2 -p 3
fiRun Code Online (Sandbox Code Playgroud)
如何确保笔记本电脑和 USB 驱动器上都存在目录,但内容略有不同,文件正确符号链接?例如:
U盘:
音乐——马修希普——帕托尔镇定——曲目1
-- 轨道 2 等...
-- 地层 -- 轨道 1
-- 轨道 2 等...
-- 平衡 -- 轨道 1
-- 轨道 2 等...
笔记本电脑:
音乐——马修希普——帕托尔镇定——曲目1
-- 轨道 2 等...
在这种情况下,不会创建到专辑 Strata 或 Equilibrium 的符号链接,大概是因为存在父目录 (Matthew Shipp)。
我不想使用rsync复制实际数据,因为我在笔记本电脑上的空间有限并且mpd能够遵循符号链接,我不需要复制文件。
是否可以调整我的脚本以将符号链接传播到笔记本电脑上预先存在的目录中?
由于您的主要目标是拥有本地和外部 Music 文件夹的组合视图,我认为可以使用联合挂载viaoverlayfs,尤其是在未写入文件的情况下。
在较旧的内核版本 (<3.18) 中,基本命令是:
mount -t overlayfs -o lowerdir=/read/only/directory,upperdir=/writeable/directory overlayfs /mount/point
Run Code Online (Sandbox Code Playgroud)
例如:
$ ls Documents
374620-63301.pdf My Kindle Content scan0005.jpg
BPMN2_0_Poster_EN.pdf scan0003.jpg StrongDC++
$ ls devel
cse ossec ubuntu-14.04-desktop-amd64-ssh.iso
nexus scripts zsh-syntax-highlighting
$ sudo mount -t overlayfs -o lowerdir=$PWD/Documents,upperdir=$PWD/devel overlayfs ~/Documents
$ ls Documents
374620-63301.pdf scan0003.jpg
BPMN2_0_Poster_EN.pdf scan0005.jpg
cse scripts
My Kindle Content StrongDC++
nexus ubuntu-14.04-desktop-amd64-ssh.iso
ossec zsh-syntax-highlighting
Run Code Online (Sandbox Code Playgroud)
一个缺点是需要sudo,也许可以使用谨慎的NOPASSWD规则来处理。
根据Jason 的博客文章,新内核的 mount 命令更改为overlay用作文件系统,而不是overlayfs,并使用额外的workdir. 内核文档现在对此进行了编码:
在挂载时,作为挂载选项“lowerdir”和“upperdir”给出的两个目录合并为一个合并目录:
Run Code Online (Sandbox Code Playgroud)mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,\ workdir=/work /merged“workdir”必须是与 upperdir 位于同一文件系统上的空目录。
您还可以使用gnu stow,一个符号链接场管理器。
\n\n假设以下布局:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 drive\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 c\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 baz\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 music\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 b\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo\nRun Code Online (Sandbox Code Playgroud)\n\n执行:$ stow --target music --dir drive .
结果:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 drive\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 c\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 baz\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 music\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar -> ../../../drive/a/b/bar\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 c -> ../../drive/a/c\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 b -> ../drive/b\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |