只要存在某个字符串,就将所有文件从文件夹A移动到B.

时间:2018-05-23 09:00:22

标签: bash awk grep xargs cp

每当文件包含某个字符串时,我都会尝试将文件从文件夹A移动到文件夹B:

grep -Rli '22/05/2018' ads/ | awk -F  "//" '{print $2}' | xargs cp $0 projection/$1

cp: illegal option -- b
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
   cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

以下可能对您有所帮助。

grep -L -Z -r 'your_string_to_be_checked' . | xargs -0 -I{} mv {} target_directory/

<强> 说明:

grep -L:表示保留那些没有我们正在搜索的特定字符串的文件。

-Z:表示输出文件名中应该有\0,因此空格不会用作分隔符。

-I{} mv {} new_directory/表示将{}替换为文件名,并将其设置为mv filename new_directory并运行它以将文件移至新位置。

我在这里使用mv你也可以在这里使用cp。

答案 1 :(得分:1)

不确定你为什么使用awk。

解决方案:

grep -lir '22/05/2018' ~/ads/* | xargs cp -t $DEST_FOLDER

Source

答案 2 :(得分:-1)

获得要复制的文件名列表后,可以使用xargs -I:

$ cat listOfFileNames | xargs -I{} cp {} $destFolder 

-I选项为参数列表提供了一个名称,允许您将它们放在任何您想要的位置。