使用 shell 脚本移动未使用的图像文件
Move unused image files using shell script
在一个文件夹中,我有一些降价文件,其中 links 到一些 png 或 jpg 图像。图片保存在 attachments
子文件夹中。
现在,如果我从 markdown file
中删除图像的 link(比如 ![](attachments/fig1.png)
),相应的图像文件当然不会被删除。我想将该图像删除到 .trash 子文件夹中。我为此编写了一个简短的 shell 脚本(在 https://www.stevemar.net/remove-unused-images/ 的帮助下),但它什么也没做!
#!zsh
imagepaths=$(find . -name '*.jpg' -o -name '*.png')
for imagepath in $imagepaths; do
filename=$(basename -- $imagepath)
if ! grep -q --exclude-dir=".git" $filename .; then
mv $imagepath ./.trash
fi
done
1。查找所有图像文件
find . -type f -name "*.jpg" -or -name "*.png"
2。创建 awk
脚本 script.awk
BEGIN { # before processing input file file "markdown.txt"
RS = "^$"; # read input file as a single string
# converst filesList into array filesArr
split(filesList,filesArr);
}
{ # process input file "markdown.txt" as single string
for(i in filesArr) { # for each file-name in filesArr
if ([=11=] ~ filesArr[i]) { # if current file-name matched in input file
delete filesArr[i]; # delete current file-name from filesArr
}
}
}
END { # after processing input file file "markdown.txt"
for(i in filesArr) { # for each unmatched file-name in filesArr
printf("mv \"%s\" ./.trash\n", filesArr[i]); # print "mv" command
}
}
3。打印所有不匹配的文件 mv
命令
awk -f script.awk -v filesList="$(find . -type f -name "*.jpg" -or -name "*.png")" markdown.txt
4。一次执行所有 mv
命令
bash <<< $(awk -f script.awk -v filesList="$(find . -type f -name "*.jpg" -or -name "*.png")" markdown.txt)
在一个文件夹中,我有一些降价文件,其中 links 到一些 png 或 jpg 图像。图片保存在 attachments
子文件夹中。
现在,如果我从 markdown file
中删除图像的 link(比如 ![](attachments/fig1.png)
),相应的图像文件当然不会被删除。我想将该图像删除到 .trash 子文件夹中。我为此编写了一个简短的 shell 脚本(在 https://www.stevemar.net/remove-unused-images/ 的帮助下),但它什么也没做!
#!zsh
imagepaths=$(find . -name '*.jpg' -o -name '*.png')
for imagepath in $imagepaths; do
filename=$(basename -- $imagepath)
if ! grep -q --exclude-dir=".git" $filename .; then
mv $imagepath ./.trash
fi
done
1。查找所有图像文件
find . -type f -name "*.jpg" -or -name "*.png"
2。创建 awk
脚本 script.awk
BEGIN { # before processing input file file "markdown.txt"
RS = "^$"; # read input file as a single string
# converst filesList into array filesArr
split(filesList,filesArr);
}
{ # process input file "markdown.txt" as single string
for(i in filesArr) { # for each file-name in filesArr
if ([=11=] ~ filesArr[i]) { # if current file-name matched in input file
delete filesArr[i]; # delete current file-name from filesArr
}
}
}
END { # after processing input file file "markdown.txt"
for(i in filesArr) { # for each unmatched file-name in filesArr
printf("mv \"%s\" ./.trash\n", filesArr[i]); # print "mv" command
}
}
3。打印所有不匹配的文件 mv
命令
awk -f script.awk -v filesList="$(find . -type f -name "*.jpg" -or -name "*.png")" markdown.txt
4。一次执行所有 mv
命令
bash <<< $(awk -f script.awk -v filesList="$(find . -type f -name "*.jpg" -or -name "*.png")" markdown.txt)