迭代文件中的行然后在目录中查找

时间:2016-05-06 19:46:56

标签: bash shell sh

我在循环和搜索时遇到问题。似乎循环不等待查找完成。我做错了什么?

我做了一个循环,逐行读取文件。然后,我想使用该“名称”来搜索目录,以查看文件夹是否具有该名称。如果存在,请将其复制到驱动器中。

#!/bin/bash

DIRFIND="$2"
DIRCOPY="$3"

if [ -d $DIRFIND ]; then

    while IFS='' read -r line || [[ -n "$line" ]]; do
        echo "$line"

        FILE=`find "$DIRFIND" -type d -name "$line"`

        if [ -n "$FILE" ]; then
            echo "Found $FILE"
            cp -a "$FILE" "$DIRCOPY"
        else
            echo "$line not found."
        fi

    done < "$1"
else
    echo "No such file or directory"
fi

1 个答案:

答案 0 :(得分:1)

你试过xargs ......

提议的解决方案

cat filenamelist | xargs -n1 -I {} find . -type d -name {} -print | xargs -n1 -I {} mv {} . 

上面做的是将一个文件名列表导入find(一次一个),当找到find打印名称并传递给移动文件的xarg时......

扩展

file = yogo

yogo -> | xargs -n1 -I yogo find . -type d -name yogo -print | xargs -n1 -I {} mv ./<path>/yogo . 

我希望上面有所帮助,请注意xargs的优点是不会耗尽命令行缓冲区。