如何将 Linux 查找、转换和复制命令合并为一个命令
How to combine Linux find, convert and copy commands into one command
我有以下 cmd,它获取文件名中带有 STP 模式的所有 .pdf 文件并将它们放入文件夹中:
find /home/OurFiles/Images/ -name '*.pdf' |grep "STP*" | xargs cp -t /home/OurFiles/ImageConvert/STP/
我有另一个 cmd 可以将 pdf 转换为 jpg。
find /home/OurFiles/ImageConvert/STP/ -type f -name '*.pdf' -print0 |
while IFS= read -r -d '' file
do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.jpg"
done
是否可以将这些命令合二为一?另外,如果可能的话,我想在单个命令中将前缀附加到转换后的图像文件名上。示例:STP_OCTOBER.jpg 到 MSP-STP_OCTOBER.jpg。非常感谢任何反馈。
可能是这样的:
find /home/OurFiles/Images -type f -name 'STP*.pdf' -print0 |
while IFS= read -r -d '' file; do
destfile="/home/OurFiles/ImageConvert/STP/MSP-$(basename "$file" .pdf).jpg"
convert -verbose -density 500 -resize 800 "$file" "$destfile"
done
与您的两个单独命令相比,此合并命令中唯一真正的新事物是使用 basename(1)
从文件名中删除目录和扩展名以创建输出文件名。
find /home/OurFiles/Images/ -type f -name '*STP*.pdf' -exec sh -c '
destination=; shift # get the first argument
for file do # loop over the remaining arguments
fname=${file##*/} # get the filename part
cp "$file" "$destination" &&
convert -verbose -density 500 -resize 800 "$destination/$fname" "$destination/MSP-${fname%pdf}jpg"
done
' sh /home/OurFiles/ImageConvert/STP {} +
您可以将目标目录和找到的所有 PDF 传递给 find
的 -exec
选项以执行一个小脚本。
该脚本删除第一个参数并将其保存到变量 destination
中,然后循环遍历给定的 PDF 路径。对于每个文件路径,提取文件名,将文件复制到目标目录,如果复制操作成功,运行 convert
命令。
我有以下 cmd,它获取文件名中带有 STP 模式的所有 .pdf 文件并将它们放入文件夹中:
find /home/OurFiles/Images/ -name '*.pdf' |grep "STP*" | xargs cp -t /home/OurFiles/ImageConvert/STP/
我有另一个 cmd 可以将 pdf 转换为 jpg。
find /home/OurFiles/ImageConvert/STP/ -type f -name '*.pdf' -print0 |
while IFS= read -r -d '' file
do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.jpg"
done
是否可以将这些命令合二为一?另外,如果可能的话,我想在单个命令中将前缀附加到转换后的图像文件名上。示例:STP_OCTOBER.jpg 到 MSP-STP_OCTOBER.jpg。非常感谢任何反馈。
可能是这样的:
find /home/OurFiles/Images -type f -name 'STP*.pdf' -print0 |
while IFS= read -r -d '' file; do
destfile="/home/OurFiles/ImageConvert/STP/MSP-$(basename "$file" .pdf).jpg"
convert -verbose -density 500 -resize 800 "$file" "$destfile"
done
与您的两个单独命令相比,此合并命令中唯一真正的新事物是使用 basename(1)
从文件名中删除目录和扩展名以创建输出文件名。
find /home/OurFiles/Images/ -type f -name '*STP*.pdf' -exec sh -c '
destination=; shift # get the first argument
for file do # loop over the remaining arguments
fname=${file##*/} # get the filename part
cp "$file" "$destination" &&
convert -verbose -density 500 -resize 800 "$destination/$fname" "$destination/MSP-${fname%pdf}jpg"
done
' sh /home/OurFiles/ImageConvert/STP {} +
您可以将目标目录和找到的所有 PDF 传递给 find
的 -exec
选项以执行一个小脚本。
该脚本删除第一个参数并将其保存到变量 destination
中,然后循环遍历给定的 PDF 路径。对于每个文件路径,提取文件名,将文件复制到目标目录,如果复制操作成功,运行 convert
命令。