我需要创建日志文件,这些文件本质上是带有 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 个点击我也审查过。
有人可以帮忙解决那个单线吗?
我想要实现的是将正常消息和错误消息重定向到一个文件。还要将错误信息打印到控制台(只有错误信息)。
无论两个目录是否不同,我都想获取二进制信息。我不想列出不同的文件。只是可以在“if”语句中使用的二进制结果。这该怎么做?
如何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”的文件。
有没有办法在字符串变量的开头和结尾插入引号?
我有这个变量说:
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) 我有一个 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)
但是非常不方便。
在我的 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) 有没有一种简单的方法来截断管道中的文件?具体来说,我想在将文件送入另一个进程之前切掉文件的最后四个字节。
理想情况下,我可以这样写:
cat input.txt | some-process | truncate --size=-4 | another-process > output.txt
但似乎该truncate命令仅在磁盘上的文件上“就地”操作。
我有一个用来查找东西的函数,但不幸的是,每当我向它传递一个控制字符($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) 如何选择出现 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-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