我正在尝试搜索具有特定扩展名的文件,然后将它们全部移动到文件夹层次结构中的一级。
基本上我有类似
/path/to/application/files/and/stuff/a1/nolongerneededirectory/*.*
/path/to/application/files/and/stuff/a2/nolongerneededirectory/*.*
/path/to/application/files/and/stuff/a3/nolongerneededirectory/*.*
我试图像这样将它们向上移动:
/path/to/application/files/and/stuff/a1/*.*
/path/to/application/files/and/stuff/a2/*.*
/path/to/application/files/and/stuff/a3/*.*
理想情况下,它将执行以下操作:
-bash-3.2$ find /path/to/ -name '*.txt'
output:
/path/to/directories1/test1/test1.txt
/path/to/directories2/test2/test2.txt
/path/to/directories3/test3/test3.txt
then
mv /path/to/directories1/test1/test1.txt /path/to/directories1/test1.txt
mv /path/to/directories2/test2/test2.txt /path/to/directories2/test2.txt
mv /path/to/directories3/test3/test3.txt /path/to/directories3/test3.txt
我一直在尝试不同的选择,然后问周围,有人有什么想法吗?
编辑1:
所以我尝试了
`find /path/to/parent/dir -type f -exec mv {} .. \
但是我被拒绝了
是的,我不确定,在上周刚开始学习脚本时,是否可以澄清一下?
—
理想2545年
我从上面链接的内容中尝试了一个选项,但是在使用其他操作系统(本例中为Solaris 10)的情况下,出现了另一个错误。
—
Ideal2545
find test -type f -exec mv {} .. \;
输出mv: cannot rename test/test2/test3/test.jar to ../crap.jar: Permission denied
是的,我看到了这个问题。因此,这会将文件相对于我执行命令的位置移动。我实际上想做的是将文件相对于文件上移一个级别。那有道理吗?
—
Ideal2545'4
啊对不起 我读错了。我链接到的帖子会将文件从您开始的位置移到父目录。您要将文件移动到其自己的父目录。删除了我的评论,因为它们已过时。
—
slhck 2012年
find /path/to/dir -type f -exec sh -c 'mv -i "$1" "${1%/*}"' sh {} \;
但最终得到了sh: bad substituion