在 cp 命令中使用 if 语句 (cmp) 的输出
Using the output of if statement (cmp) in a cp command
我正在尝试使用 if 语句的输出作为 cp 命令的输入,但它似乎不起作用。我的代码是:
for fname in $(find -name "IMG_[0-9][0-9][0-9][0-9].JPG")
do
filename=$(basename $fname)
if cmp /$filename $fname; then
cp $fname /$filename.JPG
fi
我得到的输出是
lel//IMG_0039.JPG dir/dir2/IMG_0039.JPG differ: byte 212, line 1
lel//IMG_2317.JPG dir/dir/IMG_2317.JPG differ: byte 212, line 1
我只想复制这两个文件,同时给它们添加 .JPG
后缀,这样它们就不会覆盖 </code> 中的现有文件,但是它会复制文件夹 [=] 中的所有文件14=] 到文件夹 <code>
,同时给它们 .JPG
后缀,所以现在我没有拥有不同文件的副本,而是拥有相同文件的副本,只是它们具有后缀 .JPG
我认为cp
语句是不正确的,因为cmp
只给出了文件之间的差异,如果有差异则执行cp
。我已经用 for
循环复制了文件,现在我正在尝试重命名和复制具有相同 for
但带有 if 语句的相同名称的不同文件。
您实际上并不关心 cmp
的 输出 ,只关心它的退出状态。如果退出状态不为零,则文件不同,您可能想要进行复制。另外,不要在这里打扰find
。
shopt -s globstar
for source in ""/**/IMG_[0-9][0-9][0-9][0-9].JPG; do
filename=$(basename "$source")
target="/$filename"
if ! cmp -s "$source" "$target"; then
cp "$source" "$target"
fi
# cmp -s "$source" "$target" || cp "$source" "$target"
done
!
否定退出状态,因为 if
如果条件的退出状态为零则执行主体。由于您想在 cmp
具有 非零 退出状态时执行,因此我们首先将其取反。
请务必引用所有参数扩展。如果您碰巧有一个像 /more files/IMG_9342.JPG
.
这样的文件名,那么将它们不加引号会破坏您的代码
我正在尝试使用 if 语句的输出作为 cp 命令的输入,但它似乎不起作用。我的代码是:
for fname in $(find -name "IMG_[0-9][0-9][0-9][0-9].JPG")
do
filename=$(basename $fname)
if cmp /$filename $fname; then
cp $fname /$filename.JPG
fi
我得到的输出是
lel//IMG_0039.JPG dir/dir2/IMG_0039.JPG differ: byte 212, line 1
lel//IMG_2317.JPG dir/dir/IMG_2317.JPG differ: byte 212, line 1
我只想复制这两个文件,同时给它们添加 .JPG
后缀,这样它们就不会覆盖 </code> 中的现有文件,但是它会复制文件夹 [=] 中的所有文件14=] 到文件夹 <code>
,同时给它们 .JPG
后缀,所以现在我没有拥有不同文件的副本,而是拥有相同文件的副本,只是它们具有后缀 .JPG
我认为cp
语句是不正确的,因为cmp
只给出了文件之间的差异,如果有差异则执行cp
。我已经用 for
循环复制了文件,现在我正在尝试重命名和复制具有相同 for
但带有 if 语句的相同名称的不同文件。
您实际上并不关心 cmp
的 输出 ,只关心它的退出状态。如果退出状态不为零,则文件不同,您可能想要进行复制。另外,不要在这里打扰find
。
shopt -s globstar
for source in ""/**/IMG_[0-9][0-9][0-9][0-9].JPG; do
filename=$(basename "$source")
target="/$filename"
if ! cmp -s "$source" "$target"; then
cp "$source" "$target"
fi
# cmp -s "$source" "$target" || cp "$source" "$target"
done
!
否定退出状态,因为 if
如果条件的退出状态为零则执行主体。由于您想在 cmp
具有 非零 退出状态时执行,因此我们首先将其取反。
请务必引用所有参数扩展。如果您碰巧有一个像 /more files/IMG_9342.JPG
.