小编Ben*_* W.的帖子

如何将目录及其子目录中的所有文件复制到另一个目录?

我有一个/dir1,结构是:

./aaa.txt
./bbb.jpg
./subdir1/cccc.doc
./subdir1/eeee.txt
./subdir2/dddd.xls
./subdir2/ffff.jpg
Run Code Online (Sandbox Code Playgroud)

我想将所有.txt和.jpgin/dir1及其子目录复制到/dir2.

通过使用cp -r /dir1/* /dir2,它将所有文件及其结构复制到/dir2.

通过使用cp -r /dir1/*.jpg /dir2and cp -r /dir1/*.txt /dir2,它不会复制子目录中的.jpg和.txt文件。

通过使用

for FILE in `find`
do
  cp -f $FILE /dir1/
done
Run Code Online (Sandbox Code Playgroud)

它可以将 dir 和子目录中的所有文件复制到目的地,但我无法过滤文件类型。

还有其他方法可以实现我想要的吗?

linux bash find cp

2
推荐指数
1
解决办法
4518
查看次数

使用Linux根据最小/最大值过滤一个非常大的,按数字排序的CSV文件?

我正在尝试输出相当大的CSV文件行.在过去,我尝试了不同的东西,最终发现Linux的命令行界面(sed,awk,grep等)是处理这些类型文件的最快方法.

我有一个这样的CSV文件:

1,rand1,rand2
4,randx,randy,
6,randz,randq,
...
1001,randy,randi,
1030,rando,randn,
1030,randz,randc,
1036,randp,randu
...
1230994,randm,randn,
1230995,randz,randl,
1231869,rande,randf
Run Code Online (Sandbox Code Playgroud)

虽然第一列在数值上增加,但每个数字之间的间距随机变化.我需要能够在第一列中输出值在X和Y之间的所有行.

就像是:

sed ./csv -min --col1 1000 -max --col1 1400
Run Code Online (Sandbox Code Playgroud)

这将输出第一列值介于1000和1400之间的所有行.

这些行不同,在> 5 GB的文件中可能只有大约5个重复,所以如果它只重复一次重复,那就没什么大不了 - 但如果它抛出一个错误就会大不了由于重复的线条.

我可能不知道是否存在特定的线值(例如,1000是粗略估计并且不应该假设存在作为第一列值).

linux csv bash awk sed

2
推荐指数
1
解决办法
159
查看次数

使用"mv"命令进行移动和重命名时,脚本将其视为目录而不是新文件名

我对这个mv命令有疑问.

为了移动和重命名文件,我mv file someDir/File2在终端中进行了操作,并将文件移动到someDir名为的新名称File2.

但是,当我使用shell脚本执行此操作时,它会将该File2部件视为目录,而不是文件的新名称.

所以我有两个变量NEWDir=newDir,NEWF=newName

for i in *.txt ; do
  mv $i $NEWDIR/$NEWF
done
Run Code Online (Sandbox Code Playgroud)

我运行这个脚本,它说如下:

mv: target 'newName' is not a directory.
Run Code Online (Sandbox Code Playgroud)

unix linux shell

2
推荐指数
1
解决办法
273
查看次数

为什么http.Client {}以&为前缀?

我正在学习Go,我正在阅读关于Go的官方文档net/http,我在doc中编写以下代码进行测试:

package main

import (
    "net/http"
    "fmt"
)

func main() {
    client := &http.Client{}
    resp, _ := client.Get("http://example.com")

    fmt.Println(resp)
}
Run Code Online (Sandbox Code Playgroud)

http.Client是一个支柱,但我不知道为什么有一个&指针前缀,我认为创建一个http.Client引用是没有必要的,为什么client变量有Get方法?我正在阅读"net/http"的源代码,它net/http在下面定义了struct:

type Client struct {
    Transport RoundTripper
    CheckRedirect func(req *Request, via []*Request) error
    Jar CookieJar
    Timeout time.Duration
}
Run Code Online (Sandbox Code Playgroud)

该Client结构没有Client定义的方法,但是,为什么Get变量有client方法?

methods struct pointers go

2
推荐指数
1
解决办法
935
查看次数

sed打印第4位后至少3位数字复制数字的行

我正在尝试编写一个脚本,sed以获取文件名作为参数.

我的目标是打印文件中包含至少3位数的所有行.在第4位之后,应重复所有数字.我需要一个解决方案sed.

示例输入文件:

abc 1 def2 3 ab45 z11
123 zy
ab1cd2ef3gh4z56
abc12aa
Run Code Online (Sandbox Code Playgroud)

期望的输出:

abc 1 def2 3 ab455 z1111
123 zy
ab1cd2ef3gh4z5566
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

sed '/[0-9].*[0-9].*[0-9]/d' ./F1 
Run Code Online (Sandbox Code Playgroud)

我不知道如何才能在第4位之后复制所有数字.

unix bash shell sed

2
推荐指数
1
解决办法
220
查看次数

如何从绝对路径和包文件创建 tar 存档,就好像它们是相对的一样?

在 Linux 上,我试图从不同的目录创建 .tar.gz 存档,也就是说,我有一个将从不同目录执行的 bash 脚本。该脚本将打包文件夹,我将给出文件夹的绝对目录,/home/user1/Documents/folder1但是当它打包 tar 文件时,它将整个绝对目录放在存档中,而我只想要文件夹1 中的相对目录。

例如:

tar czf /home/user1/Documents/folder1.tar.gz /home/user1/Documents/folder1

这将创建一个存档,但第一个文件夹将是主文件夹,然后在该文档中的 user1 和文件夹 1 中,当然没有来自其他分支的其他子文件夹。

控制台也给出了这个错误:

tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)

我希望它被打包,就好像我会从同一个文件夹中执行命令一样,所以存档中唯一的文件夹应该是 folder1,在里面它有自己的子文件夹。

所以里面的存档应该看起来就像我会从同一个目录中执行这段代码 folder1 是在:

tar czf folder1.tar.gz folder1

linux directory path tar subdirectory

2
推荐指数
1
解决办法
3507
查看次数

sed 中 {//!p;} 的名称和含义

我正在寻找一个 sed 命令,它可以打印模式匹配旁边的行直到文件末尾。

不知怎的,我得到了这个命令:

sed -n '/pattern match/,${//!p;}' Readme
Run Code Online (Sandbox Code Playgroud)

这确实解决了目的,但我不明白{//!p;}。它叫什么或者有什么用途?

因此,如果我想根据不同的场景跳过多行,而不仅仅是具有模式的行,我应该能够做到这一点。

我知道有不同的命令可以解决这个目的;grep、awk 是最接近的。但我想了解这种方法。

也对问题的标题感到抱歉,因为我无法更好地了解如何提出此查询。

bash scripting sed

2
推荐指数
1
解决办法
1624
查看次数

Bash分号等于换行不完全正确吗?

我在多篇文章中读过,;类似UNIX的shell 中的semicolon()等于一个新行.
然而,以下令我感到困惑,我也没有搜索它的运气.

我猜这是doshell中的一个问题,但"bash semicolon do"并不是谷歌最友好的搜索词组合.

以下是一个简单的for陈述.

for i in {1..10}
do
echo "hi"
echo "bye"
done
Run Code Online (Sandbox Code Playgroud)

正如许多Stack Overflow大师发布的那样,每个新行都可以用分号代替.

所以......我们有以下"相同"的陈述.

for i in {1..10}; do; echo "hi"; echo "bye"; done
Run Code Online (Sandbox Code Playgroud)

我们得到:

-bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

分号究竟是什么?这只是一个独特的问题do吗?

bash shell

2
推荐指数
2
解决办法
367
查看次数

如何将参数作为索引传递给jq?

嗨,我想访问json数组中的给定元素,如下所示:

$ echo '[  { "CT" : "OS1"  , "VERSION" : "3" } , { "CT" : "OS2"  , "VERSION" : "3" } ]'  | jq '.[1]'
{
  "CT": "OS2",
  "VERSION": "3"
}
Run Code Online (Sandbox Code Playgroud)

但是我想在上面的命令中使用一个变量(将来来自环境)替换索引“ 1”,但这会产生错误。

echo '[  { "CT" : "OS1"  , "VERSION" : "3" } , { "CT" : "OS2"  , "VERSION" : "3" } ]'  | jq --arg index 1 '.[$index]'
jq: error (at <stdin>:1): Cannot index array with string "1"
Run Code Online (Sandbox Code Playgroud)

看起来像这样解析后就无法将1解析为数值。有人可以帮助我吗?

parsing json jq

2
推荐指数
1
解决办法
237
查看次数

如何包含类路径通配符作为 java bash 调用的参数?

我正在尝试创建一个 bash 脚本,该脚本将在调用 java 之前构建一个参数列表,但我无法让带有通配符的类路径参数正常工作。到目前为止的脚本:

#!/bin/bash
PROP_FILES=./props/default.properties
#EXTRA_PROP_FILES_HERE

ARGS="-cp \"lib/*\""
ARGS="$ARGS -Xmx10G"
ARGS="$ARGS -Duser.timezone=GMT"
ARGS="$ARGS -Danl.property.files=$PROP_FILES"

java $ARGS main.class.path.Main
Run Code Online (Sandbox Code Playgroud)

问题出在ARGS="-cp \"lib/*\"". 我正在使用命令调试该文件bash -x runscript.sh。

如果我转义通配符 cp (如上面的脚本中所示),脚本将失败并显示输出(注意额外的单引号):

java -cp '"lib/*"' ...
Run Code Online (Sandbox Code Playgroud)

如果我不转义它,则会*扩展到 lib 目录中的所有 jar,并且也会失败

如何修改脚本以使其调用此脚本?

java -cp "lib/*" ...
Run Code Online (Sandbox Code Playgroud)

注意:我知道我可以这样做java -cp "lib/*" $ARGS ..,,但我真的很想让它发挥作用。

java bash

2
推荐指数
1
解决办法
665
查看次数

标签 统计

bash ×6

linux ×4

sed ×3

shell ×3

unix ×2

awk ×1

cp ×1

csv ×1

directory ×1

find ×1

go ×1

java ×1

jq ×1

json ×1

methods ×1

parsing ×1

path ×1

pointers ×1

scripting ×1

struct ×1

subdirectory ×1

tar ×1