我想要创建一个命令,使用3个args (搜索目录,模式匹配,然后文件创建数据写入的位置),但是我有点卡住了,因为我不知道如何让inode显示这些搜索结果并将其写入文件中。应该是这样的:
for i in "directory" if name = "pattern", inodes > "file"
就像它应该是简单的,但我似乎无法理解它?这是我到目前为止所得到的,但它没有显示inode (ls -i倾向于显示所有子目录,而不管模式匹配如何),并且说我的第三个参数太模棱两可…
#!/bin/bash
find "$1" -
如果目标文件还不存在,我将使用下面的批处理代码来转换某个目录中的所有文件,但是我不得不让它在其中的每个子映射和文件中运行(并保持输出相对于该子映射)
所以我现在用这个:
for %%f in (input/textures/*.*) do ( IF NOT EXIST "ouput/textures/%%~nf.dds" (
"bin/ThempImageParser.exe" "input/textures/%%f" "ouput/textures/%%~nf.dds"
)
)
这对于单个文件夹(如预期的那样)非常有效,它接受该
我使用mkvmerge从多个文件中提取音频。在这样做时,我想重命名提取的文件,以便以后更容易合并它们。
我现在的命令是
for /f "delims=" %%A IN ('dir /b *.mkv') DO mkvextract tracks "%%A" 2:F:\%%~nA.ogg
它从文件中提取音频,例如"x1.mkv“到"x1.ogg”
我要做的是,将音频文件(x1.ogg)重命名为另一个文件夹中的另一个文件的名称。有点像这个命令(我知道这是错误的,我试图告诉你我想要达到的目标):
for /f "delims=
这是我使用Linux脚本的第一个小时,它看起来非常强大,但我仍然有点困惑。
我想循环遍历目录中具有特定扩展名的所有文件,递归地遍历(所有子目录、子目录和.)通过在它们上运行一个可执行文件,生成一个新文件,其名称相同,但在原始文件的确切位置上有不同的扩展名。
以下是它的伪代码:
files = list of all files (full path not just names) with extension .ext recursively
for file in files
executable -option1 -option2 fullpath/file.ext1 >
我编写了一个小小的shell脚本,它在容器的up过程中创建了几个扩展名为.dist的文件的副本,而没有扩展名。
#! /bin/sh
path=$(pwd)
echo $path
shopt -s dotglob
for file in ./*.dist; do
filename=$(basename -- "$file")
#echo $filename
name="$path/${filename%.*}"
#echo $name
if [ -a "$name" ]; then
e
我一直在试图理解为什么Bash以我想要的方式来解析下面的内容,而不是通过阅读Bash参考手册()所期望的方式。从该手册中,我了解到通配符(如第一行包含的)是在执行命令之前通过文件名展开处理的。但是,第二个for循环包含另一个通配符。如果在命令行处理时对其进行了评估,则它将与子目录中的文件不匹配。但这正是它的行为方式。第二个通配符是在cd命令完成后运行时才计算的.巴什是怎么做到的?我可以想象,这是对命令行的非常纠缠的评估。
for d in *;do
cd "$d"
for f in *.zip; do
7z x "$f"
done
cd
我有多个文件夹,每个文件夹包括以下内容
视频文件xFilename.mp4
一个名为Subs的文件夹,其中包含许多srt文件xFilename.srt。
如何使用bash为每个文件夹执行mkvmerge命令,将每个mp4文件与其Subs文件夹中的所有srt文件合并,并输出与mp4文件同名的mkv文件。
有点像
for dir in ./* :
if (there is an mp4 file) :
name = "mp4 file name without the extension, dunno how to do that"
mkvmerg