GVKun编程网logo

shell – 递归搜索IBMi IFS上目录中每个文件的目录(shell递归搜索所有文件命令)

12

想了解shell–递归搜索IBMiIFS上目录中每个文件的目录的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于shell递归搜索所有文件命令的相关问题,此外,我们还将为您介绍关于Androi

想了解shell – 递归搜索IBMi IFS上目录中每个文件的目录的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于shell递归搜索所有文件命令的相关问题,此外,我们还将为您介绍关于Android 获取缓存文件的目录,文件的目录,外部存储的目录、Azure Synapse Serverless - SQL 查询返回目录中每个文件的行、bash – 从shell脚本中的目录中选择随机文件的最佳方法、bash – 如何使用shell脚本在两个不同的目录中比较具有相同名称的文件的新知识。

本文目录一览:

shell – 递归搜索IBMi IFS上目录中每个文件的目录(shell递归搜索所有文件命令)

shell – 递归搜索IBMi IFS上目录中每个文件的目录(shell递归搜索所有文件命令)

我正在尝试编写两个(编辑: shell)脚本,并且遇到了一些困难.我将解释目的,然后提供脚本和当前输出.

1:递归获取目录中每个文件名的列表.然后在该目录中搜索每个文件名的所有文件的内容.应返回每次出现的特定文件名的路径,文件名和行号.

2:递归获取目录中每个文件名的列表.然后在目录中搜索每个文件名的所有文件的内容.应该返回目录中任何文件中找不到的每个文件的路径和文件名.

我最终想要使用脚本2来查找和删除(实际上将它们移动到另一个目录以进行存档)网站中未使用的文件.然后我想使用脚本1来查看每个事件并过滤任何重复的文件名.

我知道我可以让脚本2在运行时移动每个文件而不是第二步,但我想在执行任何操作之前确认脚本功能正确.我确认它运行正常后我会修改它.

我目前正在strqsh的IMBi系统上测试它.

我的测试文件夹结构是:

scriptTest
---subDir1
------file4.txt
------file5.txt
------file6.txt
---subDir2
------file1.txt
------file7.txt
------file8.txt
------file9.txt
---file1.txt
---file2.txt
---file3.txt

我在其中一些包含现有文件名的文件中有文本.

这是我目前的脚本1:

#!/bin/bash
files=`find /www/Test/htdocs/DLTest/scriptTest/ ! -type d -exec basename {} \;`
for i in $files
do
    grep -rin $i "/www/Test/htdocs/DLTest/scriptTest" >> testReport.txt;
done

现在它正常运行,除了提供具有匹配项的文件的路径. grep默认不返回文件路径吗?

我在脚本2的距离稍远一点:

#!/bin/bash
files=`find /www/Test/htdocs/DLTest/scriptTest/ ! -type d`
for i in $files
do
    #split $i on '/' and store into an array
    IFS='/' read -a array <<< "$i"

    #get last element of the array 
    echo "${array[-1]}"

    #perform a grep similar to script 2 and store it into a variable
    filename="grep -rin $i "/www/Test/htdocs/DLTest/scriptTest" >> testReport.txt;"

    #Check if the variable has anything in it
    if [ $filename = "" ]   
            #if not then output $i for the full path of the current needle.
        then echo $i;
    fi
done

我不知道如何将字符串$i拆分为数组.我一直在第6行得到错误

001-0059 Syntax error on line 6: token redirection not expected.

我打算在实际的Linux发行版上尝试这个,看看我是否得到了不同的结果.

我很欣赏任何先进的见解.

解决方法

介绍

这不是一个完整的解决方案,因为我不是100%确定我理解你要做的事情.但是,以下内容包含一些解决方案,您可以将它们拼接在一起以执行您想要的操作.

创建测试工具

cd /tmp
mkdir -p scriptTest/subDir{1,2}
mkdir -p scriptTest/subDir1/file{4,5,6}.txt
mkdir -p scriptTest/subDir2/file{1,8,8}.txt
touch scriptTest/file{1,2,3}.txt

查找和删除重复项

在最一般意义上,您可以使用find的-exec标志或Bash循环来对文件运行grep或其他比较.但是,如果您要做的只是删除重复项,那么您可能只是更好地使用fdupes或duff实用程序来识别(并选择性地删除)具有重复内容的文件.

例如,假设测试语料库中的所有.txt文件都是零长度重复项,请考虑以下duff和fdupes示例

达夫

Duff有更多选项,但不会直接删除文件.你可能需要使用像duff -e0 * |这样的命令xargs -0 rm删除重复项.要使用默认比较查找重复项:

$duff -r scriptTest/
8 files in cluster 1 (0 bytes,digest da39a3ee5e6b4b0d3255bfef95601890afd80709)
scriptTest/file1.txt
scriptTest/file2.txt
scriptTest/file3.txt
scriptTest/subDir1/file4.txt
scriptTest/subDir1/file5.txt
scriptTest/subDir1/file6.txt
scriptTest/subDir2/file1.txt
scriptTest/subDir2/file8.txt

fdupes

该实用程序提供了以各种方式直接删除重复项的功能.一种方法是调用fdupes. – 一旦你确信你已经准备好继续下去,就会 – 删除 – 无效.但是,要查找重复列表:

$fdupes -R scriptTest/
scriptTest/subDir1/file4.txt            
scriptTest/subDir1/file5.txt
scriptTest/subDir1/file6.txt
scriptTest/subDir2/file1.txt
scriptTest/subDir2/file8.txt
scriptTest/file1.txt
scriptTest/file2.txt
scriptTest/file3.txt

获取所有文件的列表,包括非重复项

$find scriptTest -name \*.txt
scriptTest/file1.txt
scriptTest/file2.txt
scriptTest/file3.txt
scriptTest/subDir1/file4.txt
scriptTest/subDir1/file5.txt
scriptTest/subDir1/file6.txt
scriptTest/subDir2/file1.txt
scriptTest/subDir2/file8.txt

然后,您可以使用find的-exec {}功能对每个文件执行操作,或者只使用支持–recursive –files-with-matches标记的grep来查找具有匹配内容的文件.

将查找结果作为数组传递给Bash循环

或者,如果您确定文件名中没有空格,则还可以使用Bash数组将文件存储到可以在Bash for循环中迭代的变量中.例如:

files=$(find scriptTest -name \*.txt)
for file in "${files[@]}"; do
  : # do something with each "$file"
done

像这样的循环通常较慢,但如果您正在做一些复杂的事情,可能会为您提供额外的灵活性.因人而异.

Android 获取缓存文件的目录,文件的目录,外部存储的目录

Android 获取缓存文件的目录,文件的目录,外部存储的目录

getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用

一.getCacheDir、getCacheDir

getCacheDir()方法用于获取/data/data//cache目录
getFilesDir()方法用于获取/data/data//files目录

二.getExternalFilesDir、getExternalCacheDir

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据.如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
如果要保存下载的内容,就不要放在以上目录下

较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:

  • public String getDiskCacheDir(Context context) {
  • String cachePath = null;
  • if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
  • || !Environment.isExternalStorageRemovable()) {
  • cachePath = context.getExternalCacheDir().getPath();
  • } else {
  • cachePath = context.getCacheDir().getPath();
  • }
  • return cachePath;
  • }
  • 可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是 /sdcard/Android/data//cache 这个路径,而后者获取到的是 /data/data//cache 这个路径。
      注意:这两种方式的缓存都会在卸载app的时候被系统清理到,而开发者自己在sd卡上建立的缓存文件夹,是不会跟随着app的卸载而被清除掉的。

    三.Android开发:filePath放在哪个文件夹

    1. Environment.getDataDirectory() = /data
    2. Environment.getDownloadCacheDirectory() = /cache
    3. Environment.getExternalStorageDirectory() = /mnt/sdcard
    4. Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
    5. Environment.getRootDirectory() = /system
    6. getPackageCodePath() = /data/app/com.my.app-1.apk
    7. getPackageResourcePath() = /data/app/com.my.app-1.apk
    8. getCacheDir() = /data/data/com.my.app/cache
    9. getDatabasePath(“test”) = /data/data/com.my.app/databases/test
    10. getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test
    11. getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache
    12. getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test
    13. getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files
    14. getFilesDir() = /data/data/com.my.app/files

    Azure Synapse Serverless - SQL 查询返回目录中每个文件的行

    Azure Synapse Serverless - SQL 查询返回目录中每个文件的行

    您可以使用 Azure Synapse Analytics 无服务器 SQL 池中的 filepath()filename() 函数来返回这些。您甚至可以 GROUP BY 它们返回聚合结果。一个简单的例子:

    SELECT 
        [result].filepath() AS filepath,[result].filename() AS filename,COUNT(*) AS records
    FROM
        OPENROWSET(
            BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=2019/puMonth=4/*.parquet',FORMAT = 'PARQUET'
        ) AS [result]
    GROUP BY [result].filepath(),[result].filename()
    

    有关更多示例,请参阅 documentation。

    bash – 从shell脚本中的目录中选择随机文件的最佳方法

    bash – 从shell脚本中的目录中选择随机文件的最佳方法

    从shell脚本中的目录中选择一个随机文件的最好方法是什么?

    这里是我在Bash的解决方案,但我会非常感兴趣的一个更便携的(非GNU)版本在Unix适当使用。

    dir='some/directory'
    file=`/bin/ls -1 "$dir" | sort --random-sort | head -1`
    path=`readlink --canonicalize "$dir/$file"` # Converts to full path
    echo "The randomly-selected file is: $path"

    任何人有任何其他想法?

    编辑:lhunath是关于解析ls的好点。我想这是由于是否你想要便携或不。如果你有GNU findutils和coreutils,那么你可以做:

    find "$dir" -maxdepth 1 -mindepth 1 -type f -print0 \
      | sort --zero-terminated --random-sort \
      | sed 's/\d000.*//g/'

    哇,那很有趣!它也匹配我的问题更好,因为我说“随机文件”。 Honsetly虽然,这些天很难想象一个Unix系统部署有安装GNU但不是Perl 5。

    files=(/my/dir/*)
    printf "%s\n" "${files[RANDOM % ${#files[@]}]}"

    并且不解析ls。阅读http://mywiki.wooledge.org/ParsingLs

    编辑:祝你好运找到一个非bash解决方案是可靠的。大多数会破坏某些类型的文件名,例如带空格或换行符或破折号的文件名(在纯sh中几乎不可能)。要做到正确没有bash,你需要完全迁移到awk / perl / python / …没有管道输出进一步处理等。

    bash – 如何使用shell脚本在两个不同的目录中比较具有相同名称的文件

    bash – 如何使用shell脚本在两个不同的目录中比较具有相同名称的文件

    在继续使用SVN之前,我通过简单地保存/开发/目录,编辑和测试文件,然后将它们移动到/ main /目录来管理我的项目.当我决定移动到SVN时,我需要确保目录确实是同步的.

    那么编写一个shell脚本[bash]可以递归地比较两个目录中具有相同名称的文件的好方法是什么?

    注意:以上使用的目录名仅供样品使用.我不建议将代码存储在顶层:).

    diff命令具有递归比较目录的-r选项:
    diff -r /develop /main

    关于shell – 递归搜索IBMi IFS上目录中每个文件的目录shell递归搜索所有文件命令的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android 获取缓存文件的目录,文件的目录,外部存储的目录、Azure Synapse Serverless - SQL 查询返回目录中每个文件的行、bash – 从shell脚本中的目录中选择随机文件的最佳方法、bash – 如何使用shell脚本在两个不同的目录中比较具有相同名称的文件等相关内容,可以在本站寻找。

    本文标签: