【问题标题】:How to pass each line in a file as argument to a script?如何将文件中的每一行作为参数传递给脚本?
【发布时间】:2017-06-24 13:11:18
【问题描述】:

我正在开发一个连接远程文件和拉取文件并处理这些文件的项目。拉取文件时,远程中有几个目录,所以拉取每个文件夹都需要时间。所以有什么命令可以可以在下面编写的脚本中使用,这样它就可以自动拉取文件夹中的所有文件。

#!/bin/bash

clear

ssh someName@192.168.X.X 'ls SomeFolder/SomeSubFolder' > folders.txt

cat folders.txt
echo "Enter the folder name "
read folder_name

scp -r someName@192.168.X.X:SomeFolder/SomeSubFolder/$folder_name/ $folder_name/

while IFS= read -r -d '' file; do
    # single filename is in $file
    python scanner_new.py /home/nsadmin/Kiran/bash_script_run_files/"$file"
done < <(find "$folder_name" -type f -print0)
rm -rf $folder_name

每次脚本询问文件夹名称以及用户输入文件夹名称时。脚本转到远程并带来文件并执行一些操作。现在第一次进入远程时会带来folders.txt file。所以它包含所有文件夹名称。因此使用这些名称作为参数传递给python scanner.py $file_name

Folders.txt 看起来像这样

2016_9_25
2016_9_26
2016_9_27
2016_9_28
2016_9_29
2016_9_30
2016_9_7
2016_9_9

【问题讨论】:

  • 嗯? import os 行是 Python,但之前和之后的所有其他内容都是(粗略的)Bash 脚本。

标签: python linux ubuntu ssh scp


【解决方案1】:

你可以用 Python 解析 txt 文件:

from os import path

def do_stuff_with_folder(folder_name):
  folder_name = folder_name.strip()
  script_name = path.join("/home/nsadmin/Kiran/bash_script_run_files/", folder_name)
  if path.exists(folder_name):
    print "Do stuff with folder %s" % folder_name
    # do stuff with folder_name here
  else:
    print "Warning : %s not here" % folder_name

with open('folders.txt') as folder_names:
  for folder_name in folder_names:
    do_stuff_with_folder(folder_name)

循环现在在 Python 中,你只需要调用上面的脚本:

python scanner_new.py

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多