ide*_*545 5 unix shell solaris
我正在尝试搜索具有特定扩展名的文件,然后将所有文件在文件夹层次结构中向上移动一层。
基本上我有类似的东西
/path/to/application/files/and/stuff/a1/nolongerneededirectory/*.*
/path/to/application/files/and/stuff/a2/nolongerneededirectory/*.*
/path/to/application/files/and/stuff/a3/nolongerneededirectory/*.*
Run Code Online (Sandbox Code Playgroud)
我试图像这样将它们向上移动:
/path/to/application/files/and/stuff/a1/*.*
/path/to/application/files/and/stuff/a2/*.*
/path/to/application/files/and/stuff/a3/*.*
Run Code Online (Sandbox Code Playgroud)
理想情况下,它会执行以下操作:
-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
Run Code Online (Sandbox Code Playgroud)
我一直在玩不同的选择并四处打听,有人有什么想法吗?
编辑 1:
所以我试过了
`find /path/to/parent/dir -type f -exec mv {} .. \
Run Code Online (Sandbox Code Playgroud)
但我得到一个权限被拒绝
创建一个名为 的脚本move_to_parent.sh,使其可执行。
#!/bin/bash
while [ $# -ge 1 ]
do
parentPath=${1%/*/*};
cp "$1" $parentPath;
shift
done
Run Code Online (Sandbox Code Playgroud)
有关参数替换的信息可在此处找到。
这是使用 awk 进行编写的另一种方法move_to_parent.sh-
#!/bin/bash
while [ $# -ge 1 ]
do
echo $1 | awk -F/ '
{
parentPath="";
for(loop=2;loop<NF-1;loop++)
{
parentPath=parentPath"/"$loop;
}
sub(/\ /, "\ ", $0);
system("mv " $0 " " parentPath );
}'
shift
done
Run Code Online (Sandbox Code Playgroud)
运行如下 -
find /path/to/parent/dir -iname "*.txt" | xargs /path/to/scripts/move_to_parent.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4012 次 |
| 最近记录: |