我有一个/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 和子目录中的所有文件复制到目的地,但我无法过滤文件类型。
还有其他方法可以实现我想要的吗?
我正在尝试输出相当大的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是粗略估计并且不应该假设存在作为第一列值).
我对这个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) 我正在学习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方法?
我正在尝试编写一个脚本,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位之后复制所有数字.
在 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
我正在寻找一个 sed 命令,它可以打印模式匹配旁边的行直到文件末尾。
不知怎的,我得到了这个命令:
sed -n '/pattern match/,${//!p;}' Readme
Run Code Online (Sandbox Code Playgroud)
这确实解决了目的,但我不明白{//!p;}。它叫什么或者有什么用途?
因此,如果我想根据不同的场景跳过多行,而不仅仅是具有模式的行,我应该能够做到这一点。
我知道有不同的命令可以解决这个目的;grep、awk 是最接近的。但我想了解这种方法。
也对问题的标题感到抱歉,因为我无法更好地了解如何提出此查询。
我在多篇文章中读过,;类似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吗?
嗨,我想访问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解析为数值。有人可以帮助我吗?
我正在尝试创建一个 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 ..,,但我真的很想让它发挥作用。