我正在尝试编写一个简单的脚本,可以将文件夹中的每个文件复制到从当前日期生成的文件夹中。 这是我的举措。
#!/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
答案 0 :(得分:3)
不需要xargs。尝试:
find . -exec mv -t "$storage_folder" {} +
注意:
查找-exec
功能消除了xargs
的大多数需求。
由于.
是指当前的工作直销,find "$PWD"
与更简单的find .
相同。
-t target
的{{1}}选项告诉mv
将所有文件移至mv
目录。这在这里很方便,因为它允许我们将target
命令放入mv
命令的自然格式。
如果您没有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
,以便目的地中的文件不会未经您的明确批准而被覆盖。