标签: bash-scripting

使用日期格式 %Y%m%d 一致地操作日期戳字符串

我需要创建日志文件,这些文件本质上是带有 prefixyp_和 suffix 的日期戳.log,以及一个被操纵的日期:

$ touch yp_$(echo "$(date +%Y%m%d)-10" | /usr/bin/bc -l).log
$ ls
yp_20150912.log   # ... ok for today's date.
Run Code Online (Sandbox Code Playgroud)

这对今天来说很好,但是当一天的数字在 01 到 10 之间时,一切都会变得混乱。结果不能再解释为日期戳。

例如,假设这一天是 2016 年 3 月 8 日,即“20160308”。如何上面代码中,以确保减去10天会产生“20150298”,但“20150227”?还用 19820103 测试你的答案......

——我看着man date

-apropos date喷出 161 个点击我也审查过。

有人可以帮忙解决那个单线吗?

date bash-scripting

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

如何将 STDERR 重定向到文件和控制台,并将 STDOUT 重定向到文件

我想要实现的是将正常消息和错误消息重定向到一个文件。还要将错误信息打印到控制台(只有错误信息)。

bash bash-scripting

5
推荐指数
1
解决办法
3373
查看次数

如何检查两个目录是否不同(没有文件列表)

无论两个目录是否不同,我都想获取二进制信息。我不想列出不同的文件。只是可以在“if”语句中使用的二进制结果。这该怎么做?

linux command-line bash-scripting

5
推荐指数
1
解决办法
55
查看次数

查找文件但排除几个目录?

如何find列出每个文件但从搜索中排除少数目录?

find / -type f -not -path "./foo*" -not -path "/bar*" -print
Run Code Online (Sandbox Code Playgroud)

我在其他 stackexchanges 上看到过示例,例如./,但我尝试过的似乎都不起作用。

这有点有效:

find / -type f -not -path "*foo*" -not -path "*bar*" -print
Run Code Online (Sandbox Code Playgroud)

但事实并非如此;它还从搜索结果中排除名为“foo”和“bar”的文件。

linux bash shell ubuntu bash-scripting

5
推荐指数
1
解决办法
5854
查看次数

在bash中将引号插入字符串变量

有没有办法在字符串变量的开头和结尾插入引号?

我有这个变量说:

string="desktop/first folder"
Run Code Online (Sandbox Code Playgroud)

如果我回应这个,它会显示:

desktop/first folder
Run Code Online (Sandbox Code Playgroud)

我需要将字符串存储为:

"desktop/first folder"
Run Code Online (Sandbox Code Playgroud)

bash string bash-scripting

5
推荐指数
2
解决办法
3万
查看次数

如何解压缩文件名开头带连字符的文件

我有一个 Zip 文件,其名称开头带有一个连字符,比方说 '- stuff.zip'

如果我需要移动或复制文件,这意味着我需要使用双连字符,这样文件名就不会被解释为一个选项:

cp -- '- stuff.zip' '- stuff2.zip'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试对这个文件使用解压缩,那是行不通的:

unzip -l -- '- stuff.zip'

error:  -fn or any combination of -c, -l, -p, -t, -u and -v options invalid
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有我能想到的简单和双引号、反斜杠、变量中的文件名的组合,但我无法让它工作。我无法重命名文件,因为脚本将在只读文件系统上运行。

有效的一件事是使用 find :

find -maxdepth 1 -name '- stuff.zip' -exec unzip -l {} \;
Run Code Online (Sandbox Code Playgroud)

但是非常不方便。

zip bash unzip bash-scripting

5
推荐指数
1
解决办法
110
查看次数

在 Bash 脚本中处理带有空格的文件名

在我的 Bash 脚本中,我必须处理带有空格的文件名。这些是我的脚本中的重要行:

mp3file="/media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3"
echo "Command: mp3info -x `echo $mp3file`"
mp3info -x `echo $mp3file`
Run Code Online (Sandbox Code Playgroud)

不幸的是,该命令不起作用,因为文件名被拆分:

mp3info: invalid option -- '\'
mp3info: invalid option -- '\'
Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\: No such file or directory
Error opening MP3: Vol.5\: No such file or directory
Error opening MP3: \[MP3PRO\]/01\: No such file or directory
Error opening MP3: Nofx\: No such file or directory
Error opening MP3: Pump\: No such file or directory
Error …
Run Code Online (Sandbox Code Playgroud)

bash filenames bash-scripting

4
推荐指数
1
解决办法
7589
查看次数

截断管道中的文件

有没有一种简单的方法来截断管道中的文件?具体来说,我想在将文件送入另一个进程之前切掉文件的最后四个字节。

理想情况下,我可以这样写:

cat input.txt | some-process | truncate --size=-4 | another-process > output.txt

但似乎该truncate命令仅在磁盘上的文件上“就地”操作。

pipe bash-scripting

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

BASH 函数不转义控制字符

我有一个用来查找东西的函数,但不幸的是,每当我向它传递一个控制字符($intVal或其他testing :)时,它就会窒息。我想知道修复是什么?

我可以理解在 grep中使用$or%:etc 而不转义会导致此问题,但是由于我是通过引用传入的,因此我不确定如何转义它...

无论如何,这是代码。

function ffind()
{
     if [ $1 ] ; then
         find -type f | grep -ir '$1' * | grep -v '.svn'
     else
         echo "'$1' is not a valid resource"
     fi
}
Run Code Online (Sandbox Code Playgroud)

例子):

$ ffind $intVal
'' is not a valid resource

$ ffind "testing :"
bash: [: testing: unary operator expected
'testing :' is not a valid resource
Run Code Online (Sandbox Code Playgroud)

shell-script bashrc bash-scripting

4
推荐指数
1
解决办法
1118
查看次数

输出出现2次以上的项目

如何选择出现 4 次或更多的 ip,例如这里?

输入文件是

192.168.1.28
192.168.1.100
192.168.1.31
192.168.101.2
192.168.1.31
192.168.11.02
192.168.1.31
192.168.1.28
192.168.1.28
192.168.1.31
192.168.21.31
192.168.1.28
192.168.1.31
Run Code Online (Sandbox Code Playgroud)

然后我想得到这个输出:

192.168.1.28
192.168.1.31  
Run Code Online (Sandbox Code Playgroud)

首选使用 AWK

谢谢你们!:)

bash shell awk bash-scripting

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

标签 统计

bash-scripting ×10

bash ×6

linux ×2

shell ×2

awk ×1

bashrc ×1

command-line ×1

date ×1

filenames ×1

pipe ×1

shell-script ×1

string ×1

ubuntu ×1

unzip ×1

zip ×1