如何将所有文件移动到子文件夹

如何将所有文件移动到子文件夹

我需要将文件从文件夹移动到子文件夹,这是一个可以多次执行的过程,因此子文件夹可能不为空。

假设结构如下:

renatospaka@dell-w10home:~/devlpm$ ls -la
total 24
drwxr-xr-x  4 renatospaka renatospaka 4096 Sep  8 12:36 .
drwxr-xr-x 10 renatospaka renatospaka 4096 Sep  8 12:34 ..
drwxr-xr-x  2 renatospaka renatospaka 4096 Sep  8 12:36 api
-rw-r--r--  1 renatospaka renatospaka   10 Sep  8 12:36 file1.txt
-rw-r--r--  1 renatospaka renatospaka   10 Sep  8 12:36 file2.txt
drwxr-xr-x  2 renatospaka renatospaka 4096 Sep  8 12:34 new

有这个优秀的问题我从中提取了以下命令:ls | grep -v new | xargs mv -t new。它确实有效,并将内容移动到新的文件夹。但是,从第二次执行开始,由于目标文件夹不为空,因此会弹出错误,并且该过程会异常终止。

如何解决这个问题?我尝试了一些标志组合,xargs但都失败了……

答案1

mv抱怨,因为它没有从 获得任何参数xargs。如果输入为空,则添加-r以防止执行:xargs

   -r, --no-run-if-empty
          If the standard input does not contain any nonblanks, do not run the command.  Normally, the command is run once even if there is  no  in‐
          put.  This option is a GNU extension.

此外,您还可以控制mv目的地存在时的行为:

man mv

   -f, --force
          do not prompt before overwriting

   -i, --interactive
          prompt before overwrite

   -n, --no-clobber
          do not overwrite an existing file

所以:

... |  xargs -r mv -f -t new

但是,当文件中有换行符甚至空格时,你的命令就会出现严重问题。一般来说,不解析输出ls

相关内容