需要帮助利用find命令和xargs命令

时间:2017-09-11 20:57:12

标签: bash

我正在尝试编写一个简单的脚本,可以将文件夹中的每个文件复制到从当前日期生成的文件夹中。 这是我的举措。

#!/bin/bash

storage_folder=`date +%F` # date is generated to name the folder 
mkdir "$storage_folder" #createing a folder to store data 

find "$PWD" | xargs -E mv "$storage_folder" # mv everyfile to the folder

1 个答案:

答案 0 :(得分:3)

不需要xargs。尝试:

find . -exec mv -t "$storage_folder" {} +

注意:

  1. 查找-exec功能消除了xargs的大多数需求。

  2. 由于.是指当前的工作直销,find "$PWD"与更简单的find .相同。

  3. -t target的{​​{1}}选项告诉mv将所有文件移至mv目录。这在这里很方便,因为它允许我们将target命令放入mv命令的自然格式。

  4. POSIX

    如果您没有GNU工具,则find -exec可能没有mv选项。在那种情况下:

    -t

    上面为每个移动创建了一个shell进程。正如评论中Charles Duffy所建议的那样,一种更有效的方法使用find . -exec sh -c 'mv -- "$1" "$storage_folder"' Move {} \; 传递目标目录:

    $0

    安全

    正如Gordon Davisson在评论中指出的那样,为了安全起见,您可能希望使用find . -exec sh -c 'mv -- "$@" "$0"' "$storage_folder" {} + -i选项-n,以便目的地中的文件不会未经您的明确批准而被覆盖。