运行 Bash 脚本创建目录并移动文件后数据丢失

运行 Bash 脚本创建目录并移动文件后数据丢失

现在,对于几个实例,我遇到了一些非常奇怪的行为,在运行一个脚本后,该脚本在该目录中创建新目录并向其中写入文件,该目录中的部分目录和文件被删除。

有关我的系统的详细信息:

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:    22.04
Codename:   jammy

Linux ThinkPad-P16s-Gen-1 6.2.0-37-generic #38~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov  2 18:01:13 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1,6G  2,9M  1,6G   1% /run
/dev/nvme0n1p6  144G  132G  3,9G  98% /
tmpfs           7,7G   76M  7,6G   1% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
/dev/nvme0n1p1  256M   58M  199M  23% /boot/efi
tmpfs           1,6G  132K  1,6G   1% /run/user/1001
/dev/nvme0n1p4  684G  429G  255G  63% /media/thomasrauter/Data1

例如,我运行了一个我通常运行的脚本,我已经知道它可以运行,并且它第一次就运行成功了,然后我再次使用另一个输入运行它,当它运行到应该处理的文件中途时,脚本本身、.sh该目录中的另外两个脚本和一半的其他目录都消失了(它们不在垃圾箱中)。

我以前也遇到过类似的问题,目录中的所有内容都消失了。然后我fsck在那个未安装的驱动器上运行,什么也没发生,但几天后(这些天在电脑和 Ubuntu 上工作)文件突然又出现了。

有时,当脚本将多个文件写入目录时,该目录在运行时不会显示这些文件ls,并且在图形用户界面上,它显示正在加载但始终无法加载。即使我重新启动后,情况仍然如此。

抱歉,我无法描述一个简洁的问题,但我的问题基本上是你们中是否有人以前见过类似的东西(我真的认为它与 Nautilus 或 Nemo 有关),因为现在,我的 Ubuntu 感觉就像一座鬼屋。


编辑(感谢您指出我的问题):

ls -al /media/thomasrauter/返回:

total 24
drwxr-x---+ 4 root         root          4096 Dez  1 15:47 .
drwxr-xr-x  4 root         root          4096 Jun  4 15:54 ..
drwxr-xr-x  2 root         root          4096 Aug 19 10:24 Data
drwxrwxrwx  1 thomasrauter thomasrauter 12288 Dez  1 14:53 Data1

这是导致问题的脚本之一的代码(但它不是唯一的脚本,并且它以前总是能完成它的工作):

#!/bin/bash

# Check if eight arguments are provided
if [ "$#" -ne 7 ]; then
    echo "Usage: bash $0 <seq_platform> <depth> <length_min> <length_max> <length_mean> <length_sd> <accuracy_mean>"
    echo "bash simulate_reads.sh ONT 30 1000 100000 20000 10000 0.85"
    echo "bash simulate_reads.sh PacBio 30 1000 60000 15000 5000 0.90"
    exit 1
fi

# Assigning arguments to variables
seq_platform="$1"
depth="$2"
length_min="$3"
length_max="$4"
length_mean="$5"
length_sd="$6"
accuracy_mean="$7"

if [ "$seq_platform" == "ONT" ]; then
  model='QSHMM-ONT.model'
elif [ "$seq_platform" == "PacBio" ]; then
  model='QSHMM-RSII.model'
else
  echo "Error: Only ONT and PacBio supported as seq platform."
  exit 1
fi


# Check if the image exists locally
if [[ "$(docker images -q thomasrauter/pbsim3:1.0 2> /dev/null)" == "" ]]; then
    # If the image doesn't exist locally, pull it from Docker Hub
    docker pull thomasrauter/pbsim3:1.0
fi


# Create an array to store filenames
file_array=()

# Loop to find files ending with .fa or .fasta and add them to the array
for file in *.fa *.fasta; do
    if [ -e "$file" ]; then  # Check if file exists
        file_array+=("$file")
    fi
done


for fasta_filename in "${file_array[@]}"; do
  echo -e "\n#####################################################################################\n\n"
  echo -e"\nProcessing $fasta_filename"

  output_dir_name="${fasta_filename%%.*}_${seq_platform}_pbsim3_output_$(date +"%Y-%m-%d_%H-%M-%S")"

  docker run --name pbsim3 \
    -v "$(pwd)/$fasta_filename":/pbsim3/input_files/input.fasta \
    thomasrauter/pbsim3:1.0 \
    pbsim --strategy wgs \
          --method qshmm \
          --qshmm data/"$model" \
          --depth "$depth" \
          --genome input_files/input.fasta
          --length-min "$3" \
          --length-max "$4" \
          --length-mean "$5" \
          --length-sd "$6" \
          --accuracy-mean "$7"

  docker cp pbsim3:"/pbsim3/output_files" "$(pwd)/$output_dir_name"
  docker rm pbsim3 > /dev/null 2>&1

  # Change to the specified directory
  cd "$output_dir_name" || exit 1  # Exit if the directory change fails

  # Create an array to store .fastq filenames
  local_fastq_files=()

  # Find all .fastq files and add them to the array
  for local_file in *.fastq; do
      if [ -e "$local_file" ]; then  # Check if file exists
          local_fastq_files+=("$local_file")
      fi
  done

  # Concatenate all files in the array into a single .fastq file
  local_combined_fastq="combined.fastq"  # Name of the output file
  cat "${local_fastq_files[@]}" > "$local_combined_fastq"

  # Write a file with the used parameters
  output_file="pbsim3_parameters.txt"

  # Write to the file
  {
      echo "Input_fasta_file: $fasta_filename"
      echo "Seq_platform: $seq_platform"
      echo "Depth: $depth"
      echo "Length_min: $length_min"
      echo "Length_max: $length_max"
      echo "Length_mean: $length_mean"
      echo "Length_sd: $length_sd"
      echo "Accuracy_mean: $accuracy_mean"
  } > "$output_file"

  cd .. || exit 1

  echo "Simulation of the reads for the file $fasta_file completed. The files are in the dir $output_dir_name in the current working dir."
done

答案1

我现在知道了当时遇到的问题的解决方案。我遇到了一些系统级损坏,因为很久以前,当 Ubuntu 冻结时,我进行了硬关机(因为我不知道除此之外还能做什么)。重新安装 Ubuntu 后,一切都恢复正常。因此,我从中得到的教训是,如果出现非常奇怪的问题,而没有真正的解决方案,只需保存数据并重新设置一切,而不要花太多时间试图找出原因。

相关内容