我已经找到了很多解决此问题的方法,但都是复制文件然后删除。我需要一个命令来逐个移动或复制并删除文件。
我对命令行不太熟悉,所以我可以在下面管理它,但我不确定如何在复制后删除。
find . -name "*.extension" -exec cp --parent {} ../NewFolder/ \;
使用 OSX。谢谢。
答案1
不要只是复制你的 exec,而是做两件事"cp ..... && rm {} \;"
&&
在 bash 中表示“仅当上一个命令成功退出(错误代码为 0)时才运行此命令
答案2
要模仿cp --parents
,需要将mkdir
和mv
一起使用。
find . -name "*.extension" -exec sh -c 'dir=../NewFolder/$(dirname "{}"); mkdir -p "$dir" && mv -v "{}" "$dir"' \;
详细控制台剪切粘贴:
$ tree source
source
└── a
├── b
│ ├── b.extension
│ ├── c
│ │ └── c.extension
│ └── d
└── e
└── f
└── f.extension
6 directories, 3 files
$ tree dest
dest
0 directories, 0 files
$ cd source
$ find . -name "*.extension" -exec sh -c 'dir=../dest/$(dirname "{}"); mkdir -p "$dir" && mv -v "{}" "$dir"' \;
'./a/e/f/f.extension' -> '../dest/./a/e/f/f.extension'
'./a/b/c/c.extension' -> '../dest/./a/b/c/c.extension'
'./a/b/b.extension' -> '../dest/./a/b/b.extension'
$ cd ..
$ tree source
source
└── a
├── b
│ ├── c
│ └── d
└── e
└── f
6 directories, 0 files
$ tree dest
dest
└── a
├── b
│ ├── b.extension
│ └── c
│ └── c.extension
└── e
└── f
└── f.extension
5 directories, 3 files