首页 > 解决方案 > 如果找不到文件,则将 linux `find` 和 `cp` 与输出结合起来

问题描述

你好堆栈溢出 -

我想使用输入文本文件(每个文件查找一行)来做两件事:将找到的文件复制到不同的目录并提供是否找不到文件的消息。该消息不必专门说明未找到文件;它还可以包括找到的文件的位置,如下面显示的输出。我无法组合下面的两个命令。这可能吗?我确信有替代解决方案,并对这些解决方案持开放态度

#如果找不到文件或找到文件的位置,将告诉您: 命令:

for i in $(cat toGet.txt); do find . -name "$i" | grep . || echo "$i - file not found" ; done

输出:

#将找到的文件复制到新目录

for i in $(cat toGet.txt); do find . -name "$i" -exec cp {} /path/to/directory \; ; done

有什么建议么

标签: linuxbashshellcopyfind

解决方案


编写一个脚本,接收要复制到其标准输入的文件名。如果输入为空,则报告未找到该文件,否则将其复制。find然后将输出通过管道传输给它。

复制到.sh:

#!/bin/sh

looking_for=$1
dest_dir=$2
found=$(cat)
if [ -z "$found" ]
then echo "$looking_for - file not found"
else cp "$found" "$dest_dir"
while read -r i; do
    find . -name "$i" | ./copy_to.sh "$i" /path/to/directory
done < toGet.txt

推荐阅读